Skip to content

Useful JVM links

Andrew Binstock edited this page Nov 1, 2024 · 25 revisions

Hotspot JVM Runtime

Main JVM runtime directory

JVM properties and debugging routines

Bytecode Interpreter

Main directory on Github

Actual bytecode interpreter (C++)

JVM Class internals

How a loaded class looks inside the JVM

Anatomy of object headers

Implementing compressed object headers

Object header: the Mark field (code)

Object header: notes on the hash code

java.lang.Class definition in JDK 21

java.lang.Class definition in JVM Handwriting project

Native JDK function handling

JNI Handles (C++)

JVM data items

Java types

Symbolic references for constants; invokedynamic

Char sets

How the JDK chooses char sets

Determine language, variant, country of host

Encoding file paths

sun.jnu.encoding: on UNIX

https://github.com/openjdk/jdk/blob/a1c942c02b65a7fc2a837d2bb43fa134dadcad11/src/java.base/share/native/libjava/jni_util.c#L910 https://github.com/openjdk/jdk/blob/a1c942c02b65a7fc2a837d2bb43fa134dadcad11/src/java.base/share/native/libjava/jni_util.c#L727-L792 https://github.com/openjdk/jdk/blob/739769c8fc4b496f08a92225a12d07414537b6c0/src/java.base/share/native/libjava/System.c#L121 The sun.jnu.encoding property is set to the same value as file.encoding, except on MacOS where they are both hardcoded to UTF-8.

Logging

JSR 51 which set out the basic logging capabilities

Compiler Internals

How the compiler decides between TABLESWITCH and LOOKUPSWITCH bytecodes

Libraries

jdk.misc.Unsafe

Benchmark suites (for the future)

DaCapo JVM tests with apps

Debian Benchmarks Game

Programming Language Benchmarks Supersedes Debian Benchmarks

Golang

Go report card

Related projects by others

Ben Evans' partial JVM interpreter (in Rust)