JCConf 2026

Reading Java Class Files for Fun: From CAFEBABE to invokedynamic

Java developers usually write source code and let javac and the JVM handle the rest. But the generated class file contains many interesting details: the constant pool, methods, attributes, bytecode instructions, stack-based execution, synthetic methods, and invokedynamic.

In this session, we will take a guided tour of Java class files using small Java programs and javap. We will start with the basic structure of a class file, including the magic number, version, constant pool, methods, and attributes. Then we will read simple bytecode instructions as stack-machine operations, so that attendees can understand how Java code is represented after compilation.

After building this foundation, we will look at invokedynamic, one of the most interesting bytecode instructions added to the JVM. We will examine how modern Java features such as string concatenation and lambdas are represented in class files, and what bootstrap methods and call sites roughly do behind the scenes.

The goal is not to memorize the JVM specification. The goal is to enjoy discovering what Java actually becomes after compilation. After this session, attendees should be able to inspect class files by themselves and use that knowledge as a foundation for understanding Java language features, JVM behavior, performance topics, and bytecode-based tools.

Koichi Sakata

Koichi Sakata is a JVM Sustaining Engineer at Oracle, a Java Champion, and an OpenJDK Committer. At Oracle, he works on sustaining and maintaining the JVM, drawing on his long-standing interest in how Java works under the hood.

Before joining Oracle, Koichi was active in the Java community in Japan. He founded and led the Kansai Java Engineers Group, also known as KanJava, for a decade, and has spoken at many Java conferences and community events in Japan and abroad, including JCConf Taiwan.

His technical interests include class file structures, bytecode, garbage collection, and JIT compilation. Koichi is also the father of three sons and enjoys exploring different cultures through Java conferences around the world. He continues to share his knowledge and enthusiasm for Java with the global Java community.