In avvicinamento a interni Java / JVM [chiuso]


15

Ho programmato in Java per circa 8 anni e conosco abbastanza bene la lingua come sviluppatore, ma il mio obiettivo è quello di approfondire la mia conoscenza degli interni. Ho frequentato corsi di laurea in progettazione PL, ma erano panorami accademici molto ampi (in Scheme, IIRC).

Qualcuno può suggerire un percorso per iniziare ad approfondire i dettagli? In particolare, ci sono argomenti particolari (diciamo, garbage collection) che potrebbero essere più accessibili o essere un buon punto di partenza? Esiste un discreto libro di alto livello sugli interni della JVM e sulla progettazione del linguaggio di programmazione Java? Il mio approccio attuale sarà quello di iniziare con le specifiche JVM e la ricerca, se necessario.


2
Il mio approccio personale sarebbe (ed è) trovare la vera ragione di tutti quei piccoli casi "perché funziona esattamente così" in Java. Come viene definito il boxing automatico, come funzionano i tipi generici. Che dire di var-args? Cosa fa SUPEReffettivamente il flag nei file di classe? Gran parte di ciò è descritto nelle specifiche JVM, ma richiede un po 'di lavoro per tirarlo fuori da lì e nel tuo cervello ;-)
Joachim Sauer,

Risposte:


13

Ho fatto un po 'di questo quando ho iniziato con Java, anni fa. Il mio approccio era leggere le specifiche della VM e guardare l'output di javap -c, che mostra il bytecode disassemblato di una classe. Ho anche provato a creare classi java con un bytecode particolare, usando un assemblatore jtec bytecode. C'è un assemblatore chiamato jasmin , se vuoi provarlo.

Potresti anche voler guardare il documento Lambda Expression Translation che Brian Goetz di Oracle ha pubblicato, che copre la strategia che verrà utilizzata per tradurre le lambda (chiusure, essenzialmente) che vengono aggiunte in Java 8.

Puoi anche ottenere il codice sorgente per la macchina virtuale Hotspot da OpenJDK e la versione di accesso anticipato del compilatore javac con supporto lambda (repository hg) per JDK 8, se hai davvero voglia di immergerti nel profondo del pool.

Esaminare la raccolta dei rifiuti è probabilmente una buona idea. Una rapida ricerca ha rivelato questo articolo del Dr. Dobbs sul GC Garbage-first di Java. Non so se sia una buona introduzione. Presumo che tu sappia già di mark-and-sweep e generational garbage collector; in caso contrario, ti consigliamo di leggere prima quelli.


3

Alcune idee aggiuntive:

  • Fatti coinvolgere nel progetto OpenJDK . Niente è meglio di capire gli interni di alcuni software hackerandoli!
  • Guarda come altre lingue JVM (ad esempio Clojure o Scala) generano il codice per la JVM
  • Fai un mini-progetto che ti interessa e richiede l'uso di interni JVM. Forse usando qualcosa come ASM per manipolare il bytecode ...

2

Se non hai ancora familiarità con il formato del bytecode Java, prendi in considerazione la possibilità di scrivere un piccolo compilatore che crei un codice byte Java valido (o un assemblatore Jasmin) e fallo funzionare correttamente.

Vedere "Hello World" o "4" (dato 2 + 2) generato dal tuo codice è molto soddisfacente.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.