ho avuto questo tipo di linee nella mia uscita gc:
44871.602: [GC-- [PSYoungGen: 342848K->342848K(345600K)] 961401K->1041877K(1044672K), 0.1018780 secs] [Times: user=0.16 sys=0.00, real=0.11 secs]
ho letto la risposta di Yishai e non avrebbe molto senso, ma ho voluto vedere con i miei occhi nel codice sorgente di Java GC, quando la JVM stampa "-" nel registro GC e perché.
Perché a mia conoscenza "scavenging Parallelo" del giovane Gen è un GC stop-il-mondo, quindi non ci non potrebbe essere oggetti creati parallelamente a questo GC. (Vedi https://blogs.oracle.com/jonthecollector/entry/our_collectors)
È possibile trovare questo nel codice sorgente JDK (vedi http://hg.openjdk.java.net/jdk7/jdk7) g1CollectedHeap.cpp e psScavenge.cpp
jdk7-ee67ee3bd597/hotspot/src/share$ egrep -h -A2 -B5 -r '"\-\-"' *
# G1 Collector
if (evacuation_failed()) {
remove_self_forwarding_pointers();
if (PrintGCDetails) {
gclog_or_tty->print(" (to-space overflow)");
} else if (PrintGC) {
gclog_or_tty->print("--");
}
}
--
# Parallel Scavenge Collector
promotion_failure_occurred = promotion_failed();
if (promotion_failure_occurred) {
clean_up_failed_promotion();
if (PrintGC) {
gclog_or_tty->print("--");
}
}
Motivo GC-- con il parallelo scavenging Collector
il giovane GC ha rilevato un errore di promozione (vedi http://mail.openjdk.java.net/pipermail/hotspot-gc-use/2010-March/000567.html):
Un fallimento di promozione è una scavenger che non ha successo perché non c'è abbastanza spazio nel vecchio gen per fare tutte le promozioni necessarie. Lo scavenger è in sostanza slegato e quindi viene eseguita una compattazione STW completa dell'intero heap.
'Non c'è abbastanza spazio' non significa necessariamente che non c'è abbastanza spazio nel vecchio, ma che il vecchio spazio è molto frammentato (vedi http://blog.ragozin.info/2011/10/java-cg-hotspots-cms-and-heap.html):
[ ...] è impossibile trovare una certa quantità di memoria continua per promuovere un particolare oggetto grande, anche se il numero totale di byte liberi è abbastanza grande.
Queste due opzioni JVM potrebbe aiutare ad analizzare la tua frammentazione heap (vedi http://blog.ragozin.info/2011/10/java-cg-hotspots-cms-and-heap.html):
-XX:+PrintPromotionFailure
-XX:PrintFLSStatistics=1
Motivo GC-- con il G1 di raccolta
Un fallimento di evacuazione con il G1 è quando una Regione Survivor non ha abbastanza spazio per gli oggetti sopravvissuti di una Regione giovane.
Non so se G1 Collector risponde a un errore di evacuazione con un GC completo oppure no.
Dato il timestamp e le quantità di memoria, suppongo che abbia eseguito una garbage collection ma abbia perso memoria disponibile (perché altri oggetti sono stati creati in parallelo) – Yishai
Yishai, grazie, ha molto senso. Non sono sicuro se sia giusto o no, ma potrebbe essere molto bene. – RodeoClown
Vuoi metterlo in una risposta in modo che io possa votarlo/accettarlo? :) – RodeoClown