The architecture and internals of the JVM, or realistically the architecture of Oracle/Hotspot (with a few references to Azul). The other JVMs sometimes make different architectural choices. There's less material about them out there, at least in the places I'm familiar with.
I've also compiled some notes on type erasure, the red meat of JVM architecture discussions.
What follows is rather scattered. I'd love a set of overviews at varying levels. The first few chapters of Scott Oak's Java Performance have some very readable material on the JIT and Garbage Collection, but the book isn't focused on architecture. The https://docs.oracle.com/javase/specs[spec]] is also valuable, but it takes a special sort of person to readspec straight through, and it won't tell you anything about implementation.
Java 7 era introduction to the architecture of the JVM. A mixture of things mandated by the spec and common implementation strategies like JIT compilation. Covers quite a few things, but not in depth, and I'm not sure whether it's clear enough for beginners. Permgen is one thing that I know is outdated, and the description of garbage collection only applies to stop the world collectors.
Cliff Click discusses several things that we'd want either the kernel or the JVM to provide (there are several different similar talks he's given on youtube that are worth watching, including his 2016 VMLS talk).
- OS support for monotonic time, for instance.
- OS thread priorities (says Azul fakes this)
- JVM support for fixnums
- Application support for resource reclamation
Additionally, he claims bytecodes are slow and a poor way to describe program semantics, compared to alternate machine independent descriptions.
Mini-posts on JVM architecture by Aleksey Shipilëv.
Nitsan Wakart introduces the concept of a safepoint and plunges into experiments/benchmarks surrounding how safepoints work.
How the JVM uses
SIGSEGV to let threads poll for
Not sure how old this is, perhaps mid-late 2000s? Dry, but contains information about the runtime startupt that I hadn't seen elsewhere.
A bestiary of classes implementing exotic semantics in Java
This dates to the Java 2 days. Could be relevant for history's sake.
Proposal for handling the specification of value types in classfiles in a backwards compatible way. (May 2018).
Java enhancement proposals, both changes to the Java language and to the VM.