Avvicinamento di 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 è di approfondire la mia conoscenza degli interni. Ho preso corsi di laurea in design PL, ma erano molto ampie visioni accademiche (in Scheme, IIRC).

Qualcuno può suggerire un percorso per iniziare a scavare nei dettagli? In particolare, ci sono argomenti particolari (ad esempio, garbage collection) che potrebbero essere più accessibili o essere un buon punto di partenza? C'è un buon libro di alto livello sugli interni della JVM e il design del linguaggio di programmazione Java? Il mio attuale approccio sarà quello di iniziare con la specifica JVM e ricerca secondo necessità.

    
posta spinning_plate 01.06.2012 - 02:11
fonte

4 risposte

13

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

Potresti anche voler dare un'occhiata al documento di traduzione di Lambda Expression che Brian Goetz of Oracle ha pubblicato, che copre la strategia che verrà utilizzata per tradurre i lambda (chiusure, in sostanza) che vengono aggiunte in Java 8.

Puoi anche ottenere il codice sorgente per la Hotspot VM di OpenJDK e la versione iniziale di accesso di compilatore javac con supporto lambda (repository hg) per JDK 8, se hai davvero voglia di tuffarti nella parte più profonda della piscina.

Guardare nella raccolta dei rifiuti è probabilmente una buona idea. Una rapida ricerca ha trovato questo Dr. Articolo di Dobbs su GC di Java. Non so se sia una buona introduzione. Presumo che tu sappia già dei spazzini di spazzatura e di spazzatura generazionale; in caso contrario, vorrai leggere i primi.

    
risposta data 01.06.2012 - 02:46
fonte
3

Alcune idee aggiuntive:

  • Partecipa al progetto OpenJDK . Non c'è niente di meglio che capire l'interno di alcuni software hackerandoci sopra!
  • Guarda come altre lingue JVM (ad esempio Clojure o Scala) generano codice per JVM
  • Esegui un mini-progetto che ti interessa e richiede l'uso di internals JVM. Forse usando qualcosa come ASM per manipolare il bytecode ..
risposta data 01.06.2012 - 09:33
fonte
2

Se non hai ancora familiarità con il formato bytecode Java, prendi in considerazione la scrittura di un minuscolo compilatore che crea 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.

    
risposta data 01.06.2012 - 13:22
fonte
1

Oltre a ciò che hanno detto tutti, consulta la pagina Ottimizzazione prestazioni Java . Contiene molti articoli sulla raccolta dei rifiuti e sull'ottimizzazione delle prestazioni in generale. Contiene anche un elenco di manuali di ottimizzazione delle prestazioni che potrebbero essere interessanti anche per te.

    
risposta data 01.06.2012 - 12:45
fonte

Leggi altre domande sui tag