older adventures

I won’t let Java confuse you #0: increment

Sometimes the code that seems really clear can turn out to be quite deceiving, even in some really basic concepts. In these situations, it’s good to question whether that code doesn’t smell......

The Hidden Dynamic Life of Java

This article is an (elaborate) transcript of my talk, ‘The Hidden Dynamic Life of Java’, presented on J-Fall 2023...

Java compiler-decompiler ping-pong

This small episode related to Java compilation seemed interesting and a bit funny to me, so I’m sharing it here...

Java Invokedynamic: Bootstrapping an Alternative Method

This experiment intends to demonstrate the power of the invokedynamic instruction in JVM. This instruction is used for different pieces of Java functionality these days, such as switch statements, lambdas, and many...

Java 21: So How Should We Construct Strings Now?

Java 21 brings in a lot of cool features, and one of them is the preview of String Templates*. While it serves more purposes than just classic String interpolation, for us Java...

static final what?

I accidentally discovered something interesting about constant fields in Java, so I decided to share it here in a short article. When we need to create a constant field in Java, we...

invokedynamic in GraalVM native image: how is it possible?

GraalVM has this really cool feature: you can build a native executable from your Java, Scala, or other application. Your application becomes lighter, starts super quickly, it’s more performant, and you don’t...

Java 20 Pattern Matching for Switch: What’s Under the Hood?

Pattern matching for switch statements and expressions has evolved as the latest releases unveiled. We can already play with the most exciting changes, such as pattern guards and record patterns, in the...

JVM bytecode instructions explained

In the first part, we discussed the bytecode and some parts that it contains, namely debug information and constant pool. In this part, we will discuss the bytecode execution. Below is the...

JVM bytecode: introduction

Recently, I had a chance to dive deeper into the JVM bytecode than I was ever expecting. It took me tons of documentation, articles, Stack Overflow topics, and bytecode listings to gain...

How to start contributing to OSS

Many of us, software engineers, at some point in time decide that we would like to get involved with an open-source project. Many of us indeed become contributors, but it’s not always...

The tale about Hibernate and temporal tables

Earlier this year, I was involved in solving an issue on a project that was using Hibernate + Envers and Microsoft SQL Server as the database. The choice of database was mainly...