Articles

I Love Technical Debt

I’m pretty sure we all know what technical debt is, attributed to Ward Cunningham in 1992, it basically states that there is no free lunch. But I love it. It makes us ship things quickly, validate them then refine them later. But it comes with a condition…

System Models in Distributed Systems

The foundation of every algorithm in a distributed system is on what kind of underlining hardware system it will execute on. In practice, nodes (physical or virtual machines) and communication links between them (the physical network layer), can behave in a variety of ways. So for an algorithm to be correct, we need to assume what properties the underlining systems will have.

Java Memory Model – Specification Introduction

Multithreading is hard and if not coordinated and synchronized correctly it is way harder (talking about data races). This is my Infobip DevDays conference presentation where I tried to explain the Java Memory Model specification and how memory consistency is achieved.

JVM Architecture Introduction

If you do any Java programming (or any other JVM language) it is pretty mandatory to know how our code is loaded and executed. With this presentation, I’ll try to explain JVM architecture with its main components, the Class Loader, Runtime Data Area, and the Execution Engine.

General Races and Data Races

In a multithreaded program, races are rally bad. The reason for this is that a program is compiling correctly, tests are passing and it runs in production for months, and then, all of a sudden, the program returns a result that is everything but the expected one.

Cache Coherence

In order for a CPU to see all the different memories as a single fast and large memory component (see memory hierarchy) and to boost the performance by not going to the main memory to fetch the data, modern processors rely heavily on caching. Processors have multilevel caches after which, in case of a cache …

Cache Coherence Read More »