The Java Class File Constant Pool

Everything that is constant in a class file is reflected in the constant pool. This means not only string or numeric constants, but everything that does not change during runtime, e.g.: variable and method names, method signatures, class names etc.

The information contained in the constant pool can be used to better understand the Java compiler or to do some static analysis.

Continue reading “The Java Class File Constant Pool”

Java Class File Major & Minor Version

Every Java developer at some point comes across the following Exception and wonders what the strange numbers mean.

Exception in thread "main" java.lang.UnsupportedClassVersionError: java\SampleClass : Unsupported major.minor version 51.0

This happens when the class file has been compiled for a newer Java version than the version of the runtime, that is trying to load the class. But why the heck is it such a strange version number like 51.0 and what version of Java is this?

In the third part of the series about the Java Class File Format I take a look at the minor and major version information.

Continue reading “Java Class File Major & Minor Version”

0xCAFEBABE – The Java Class File Magic Number

As we saw in the last post each Java class file starts with the so-called “magic” section. This has historic reasons and goes back to the very early days of the Java language. You may take a look here or here for more details about James Goslings decision.

Continue reading “0xCAFEBABE – The Java Class File Magic Number”

The Java Class File Format – an Overview

The Java Class File Format is the format in which Java classes are stored when Java source files are compiled by the Java compiler. It includes all the information from the source files as well as some optimizations, but in a format the JVM can handle.

A complete description can be found in chapter 4 of the Java Virtual Machine Specification.

Continue reading “The Java Class File Format – an Overview”

Learning the Java Class File Format

Did you ever read that ("string 1" == "string 1") == true but ("string 1" == new String("string 1")) == false? Ever came across the terms “Constant Pool“, “StackMapTable” or the “java.lang.UnsupportedClassVersionError: Unsupported major.minor version” exception?

Continue reading “Learning the Java Class File Format”