Domanda

ho notato un API compilatore in JDK 7. Questo significa che un programma Java può ricompilare e modificare la definizione di un programma in esecuzione?

Al momento so che prodotti come JavaRebel possono fare questo, ma di offrire un download gratuito di una JavaRebel esclude prodotto che è un pagato per il prodotto.

È stato utile?

Soluzione

Il compilatore API è già disponibile in Java 6.

Non possiamo cambiare il codice delle classi già caricati -. La sostituzione del codice a caldo sarà comunque limitata a debug, ma ci può compilare il codice sorgente da applicazioni Java e caricare le classi di nuova creazione in fase di esecuzione

Altri suggerimenti

Sì, è possibile. Un modo è quello di scrivere una classe-loader specializzata e utilizzare uno strumento di aumento bytecode come ASM e parti alter dell'applicazione in fase di esecuzione. E 'anche possibile ottenere lo stesso utilizzando un javaagent e di nuovo ASM o qualcosa di simile.

Per quanto ne so Java 7 introduce metodi senza ulteriori di auto-modifica.

Alcuni degli affetti può già essere fatto utilizzando l'API compilatore e ClassLoaders, mentre altri può essere fatto utilizzando la JVM TI .

Ma per quanto ne so Java 7 non introduce alcuna modifica sostanziale a tali API.

C'è un progetto per aggiungere JRebel simile classe ricarico funzionalità per OpenJDK 7, anche se non è attualmente parte della Aperto JDK 7: dinamica del codice Evolution VM (DCEVM)

Funziona attraverso il normale meccanismo JVMTI classe ridefinizione .

Javeleon funzionalità offerte in tal senso; è disponibile senza alcun costo, ma non liberamente distribuibile.

L'API compilatore (JSR 199) ha poco a che fare con il codice ricaricare o auto-modificazione, se non in quanto un programma che desidera caricare un nuovo codice byte in qualche modo potrebbe utilizzare 199 per costruire che bytecode dalla sorgente Java, piuttosto che utilizzare un'API assemblatore come ASM.

Aggiornamento:

Sembra che Javelon non è più disponibile in quanto è stato acquisito da ZeroTurnaround (creatori di JRebel)

Dalla homepage Javelon:

Nota:. Javeleon non sarà più disponibile per il download come prodotto stand-alone

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top