Conceitos de JVM

Como a JVM funciona por baixo dos panos, um conceito de cada vez.

Ordenar

Compilation & Bytecode

1

Bytecode: Branching, Returns e Synchronization

Como branches condicionais sempre compilam para o inverso da condição do source, por que == em objetos é if_acmpeq (identidade, nunca equals()), por que um switch compila para tableswitch ou lookupswitch dependendo da densidade dos labels, por que return é seis instruções específicas de tipo em vez de uma, e por que um bloco synchronized custa uma exception table gerada pelo compilador que um método synchronized nunca precisa.

2

Bytecode: Criação de Objetos, Acesso a Campos e Despacho de Métodos

Por que 'new' é alocar-e-depois-construir como duas instruções separadas, como o acesso a campos e arrays se divide em famílias distintas de opcodes, e por que o JVM tem cinco instruções invoke* diferentes em vez de uma — incluindo por que o javac moderno não emite mais invokespecial para chamadas de método privado.

3

Bytecode: Operand Stack, Aritmética e Conversões de Tipo

Como funciona a aritmética em stack machine do bytecode — os prefixos i/l/f/d, por que comparações de float e double precisam de dois opcodes para tratar NaN corretamente, e por que conversões de estreitamento como d2i e i2b perdem dados silenciosamente em vez de lançar exceção.

4

Compilação JIT e Tiered Compilation: C1, C2 e Warm-Up

Como o JVM transforma bytecode em código nativo enquanto o programa já está rodando, por que ele espera o código ficar "quente" antes de compilá-lo, e como a tiered compilation combina um compilador que inicia rápido (C1) com um mais lento e mais inteligente (C2).

5
🔬 Lab

O Formato de Arquivo .class: Header, Constant Pool, Fields e Methods

Como o javac transforma código-fonte Java em um arquivo .class binário estruturado — magic number e versão no header, a tabela de referências simbólicas do constant pool, access flags, como fields e methods são organizados para o JVM carregar e executar, e os códigos de descriptor de uma letra (B/C/D/F/I/J/S/Z, L...;, [) que codificam cada tipo no arquivo.

Memory & Performance

Garbage Collection

Concurrency & I/O

Profiling & Benchmarking

Database Integration