Conoscere il bytecode Java e la JVM
-
05-07-2019 - |
Domanda
In una recente domanda posta di recente, la mia semplice risposta ha evidenziato molti dei miei malintesi su Java, JVM e su come il codice viene compilato ed eseguito. Ciò ha creato in me il desiderio di portare la mia comprensione a un livello inferiore. Non ho problemi con la comprensione di basso livello come il montaggio quanto mai bytecode e JVM mi confondano. Mi viene perso il modo in cui il codice orientato agli oggetti viene suddiviso a basso livello. Mi chiedevo se qualcuno avesse qualche suggerimento su come imparare a conoscere la JVM, il bytecode e il funzionamento di livello inferiore di Java. Ci sono utilità là fuori che ti permettono di scrivere ed eseguire direttamente bytecode poiché credo che l'esperienza diretta con qualcosa sia il modo migliore per crescere nella comprensione di esso? Inoltre, sarebbe gradito leggere suggerimenti su questo argomento.
Modifica: domanda secondaria. Quindi ho una sorta di sotto-domanda, le risposte mi hanno dato un'idea interessante da imparare sul jvm, quale sarebbe la plausibilità di scrivere un linguaggio davvero semplice come brainf ** k o Ook solo in una sintassi leggibile (forse potrei persino svilupparlo supportare oo eventualmente) che compila in bytecode essere? Sarebbe una bella esperienza di apprendimento?
Soluzione
Lettura consigliata: le specifiche JVM .
Potresti anche voler giocare con BCEL - ci sono altre librerie in giro per manipolare il bytecode, ma quello è probabilmente il più noto.
Altri suggerimenti
Il Apache BCEL ti permetterà di analizzare e creare a mano file .class da bytecode.
javap ti permetterà di smontare file .class esistenti. È particolarmente utile per bussare alle lezioni di test rapido per capire cosa sta realmente succedendo sotto le copertine.
Ho imparato leggendo il tutorial ASM e scherzando con la libreria stessa.
IMHO, ASM è meglio di BECL.
BCEL è già in uso con successo in diversi progetti come come compilatori, ottimizzatori, oscuratori, generatori di codice e strumenti di analisi. Purtroppo lì non c'è stato molto sviluppo in corso negli ultimi anni . Sentiti libero di aiuto o potresti voler avere un guarda il progetto ASM su ObjectWeb. - http://jakarta.apache.org/bcel/
Esiste una sola fonte affidabile per la comprensione di JVM
Specifiche Java® Virtual Machine Specification Java SE 7 Edition
http://docs.oracle.com/javase/ spec / JVM / SE7 / html / index.html
Programmazione per la macchina virtuale Java è un buon libro per questo argomento. (Divulgazione: lavoro con l'autore.)
Per comprendere Java / l'architettura di JVM: leggi Wikipedia, le specifiche e il codice sorgente.
Per capire come il codice orientato agli oggetti viene eseguito a un livello basso: prova ad emulare funzioni come eredità / polimorfismo / incapsulamento in un linguaggio di livello inferiore come C.
In C puoi ottenere quanto sopra attraverso, ad esempio, una combinazione di puntatori a funzione e strutture nidificate.