2012-03-24 31 views
7

Solo curioso. Ho sentito qualcosa sul nuovo G1GC che risolve questo problema di latenza. Non posso/non voglio usare RTSJ.Esiste un GC in Java che non introduce la latenza (stop-the-world) forse eseguendo contemporaneamente il 100%?

Grazie in anticipo

+0

Forse si dovrebbe guardare in grado militare hard real-time Java Aonix PERC chiamata che utilizza la tecnologia garbage collection deterministica http: // www .atego.com/products/aonix-perc/more su Java in tempo reale http://en.wikipedia.org/wiki/Real_time_Java – ecle

risposta

2

Non penso ci siano dei garbage collector a zero-pause. Ma in generale un collezionista a bassa pausa come CMS farà il suo lavoro.

I problemi con pause e riduzione pausa sono i seguenti:

  • A zero pausa (o quasi zero pausa) regime raccolta significativamente aumenta spese per normale esecuzione del programma. Questo è particolarmente vero con i linguaggi multithread come Java.

  • Gli schemi che utilizzano thread o thread dedicati per eseguire la garbage collection possono essere sommersi se l'applicazione genera troppa garbage.

  • Qualsiasi schema GC offre prestazioni scadenti se i modelli di utilizzo della memoria dell'applicazione sono troppo "grumosi" e/o se non si dispone di memoria fisica e virtuale sufficiente.

+1

Esistono GC senza paus ([Azul's] (http://www.azulsystems.com/products/zing/faq#pauseless) ad esempio che è inteso come JVM lato server) ma sicuramente non in Oracle JVM stesso. – ecle

+0

Lettura interessante che ho trovato qui con commenti che discutono il problema sui GC in pausa/senza pause: http://blogs.forrester.com/john_r_rymer/10-06-21-why_im_worried_about_javas_future – ecle

+0

@eee - L'ho scremato. Ma non capisco di cosa stia parlando con la sua restrizione 2Gb-per-JVM. Le JVM HotSpot a 64 bit sono in circolazione da molto tempo ... –

6

Sembra che si stanno cercando il CMS GC — concurrent mark sweep.

enter image description here

(fonte: https://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf, p.12)


dicembre 2015 aggiornamento: potreste essere interessati a GC "pauseless" di Azul. Vedi Explanation of Azul's "pauseless" garbage collector per ulteriori informazioni.

+0

L'ultima volta che ho controllato, anche CMS aveva latenze stop-the-world. – JohnPristine

+0

Hm. AFAIK, tutti i GC JVM hanno questo - non sono sicuro che sia anche teoricamente possibile scrivere un GC che non ha _any_ stop-the-world. Il CMS GC ha appena uno stop-the-world. –

+0

+ 1 bel diagramma. – Kevin

7

Potresti essere interessato a qualcosa come Zing JVM.

I sistemi Azul hanno fatto un grande sforzo per l'ottimizzazione JVM a bassa latenza. Credo che ci siano anche alcuni documenti tecnici interessanti che spiegano come ciò sia fatto.

+0

Obiettivi di destinazione Zing JVM come JVM lato server. – ecle

1

Si può provare l'ultima collezione Garbage G1 in JDK 7.