The need to encapsulate the runtime is fundamentally caused by Java’s nature as an open programming environment.
The invokedynamic instruction added in Java 7 makes it possible to resolve method calls dynamically at runtime.
Special bytecodes make calling methods particularly efficient. Knowing how they operate reveals how the JVM executes your code.
See how virtual threads bring back the old days of Java’s green threads—that is, Java threads not tied to operating-system threads.
Look into the bytecode to see how Java handles lambdas.
Just because you can break the rules, doesn’t mean you should break the rules—unless you have a good reason.
Get a stream of high-volume data points about your running app.
A first look at how Java 14’s data records will change the way you code
How Java is moving toward pattern matching, improved enums, and better switch statements
Scan, inspect, generate, and transform bytecodes on the fly with the ASM library.