Modifica del Garbage Collector sulla tua JVM [chiuso]

2

La mia comprensione è che la specifica JVM definisce solo il comportamento di un garbage collector, ma non fornisce dettagli di implementazione. Ciò significa che spetta all'implementazione JVM creare il garbage collector.

Sembra che ci siano garbage collector di terze parti come Azul Pauseless GC . Per me, questo implica che la mia implementazione JVM, ad esempio HotSpot o JRockit, è configurata di default per utilizzare il proprio garbage collector incorporato. Ma , forse attraverso la configurazione, potrei usare un garbage collector di terze parti (come quello di Azul o un altro).

Quindi chiedo: come si fa a "scambiare" il garbage collector con un altro? Se la risposta è specifica dell'implementazione JVM, supponiamo HotSpot.

    
posta smeeb 13.05.2015 - 20:18
fonte

1 risposta

8

Garbage collector e generatori di codice (in particolare motore JIT all'interno di qualsiasi JVM industriale) sono strettamente correlate, in particolare perché la maggior parte dei GC sono generazionali e richiedono una barriera di scrittura (che è un vincolo sul generatore di codice) e dipendono anche da problemi di multithreading. E il GC è anche (ovviamente) legato alle allocazioni di oggetti che sono specifiche di JVM. Leggi il manuale GC per ulteriori spiegazioni.

I GC generazionali gestiscono oggetti giovani in modo diverso (che di solito muoiono rapidamente) da quelli più vecchi. Copiano spesso gli oggetti giovani dal vivo in alcune regioni di memoria più vecchie, quindi l'intera regione di nascita può essere rilasciata. Ma hanno bisogno di tracciare qualsiasi oggetto vecchio che è stato modificato per contenere un puntatore alla regione più recente. Questa è una barriera di scrittura e richiede un codice speciale che deve essere emesso dal motore JIT per le modifiche sul campo dell'oggetto (giovane).

BTW, il Azul PGC link che hai ha fornito un video che spiega tutto che!

Quindi in pratica non puoi facilmente collegare un altro GC all'interno della tua JVM senza applicare patch significativamente al codice JVM.

    
risposta data 13.05.2015 - 20:32
fonte

Leggi altre domande sui tag