2013-12-13 22 views
7

Ho notato che ogni nuova garbage collection con java 7 richiede in media 10 millisecondi in più rispetto a java 6. Sto usando 1.6.0_31 e 1.7.0_21. La configurazione non è cambiata, né ha l'hardware, argomenti JVM sono:La garbage collection dei giovani si interrompe più a lungo con java 7 vs java 6

-server -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+TieredCompilation -XX:+AggressiveOpts -Xms1g -Xmx1g -XX:MaxNewSize=256m -XX:NewSize=256m 
  • Java 7:
 
S0C S1C S0U S1U  EC  EU  OC   OU  PC  PU YGC  YGCT FGC FGCT  GCT 
26176.0 26176.0 3531.6 0.0 209792.0 21648.8 786432.0 86777.6 49472.0 49350.1  82 1.830 0  0.000 1. 
  • Java 6
 
S0C S1C S0U S1U  EC  EU  OC   OU  PC  PU YGC  YGCT FGC FGCT  GCT 
26176.0 26176.0 0.0 1210.5 209792.0 95873.4 786432.0 65327.1 35968.0 35891.2  83 0.620 0  0.000 0.620 

Ho anche guardato a ciascun individuo volte, e con java 6, ogni YGC richiede ~ 10ms contro java 7 è 20ms. Qualcosa è cambiato tra la versione 6 e 7 che potrebbe spiegare questo comportamento?

EDIT: Ho notato che java 7 viene eseguito in modalità a 64 bit, mentre java 6 utilizza una JVM a 32 bit, potrebbe spiegare la differenza?

Grazie

+0

Sospetto che la dimensione dell'eden e della generazione giovane sia diversa per impostazione predefinita e questo può modificare questo tipo di comportamento. Puoi stampare le dimensioni reali? –

+0

Algoritmo diverso o parametri diversi. –

risposta

2

predefinito -XX:NewRatio per Java 6 è 8 ma per il Java 7 è 2. quindi in java 6 la dimensione della giovane generazione è inferiore a java 7 quindi la differenza che sento.

Perché il tempo che raccoglie la spazzatura da una città è direttamente proporzionale alla grandezza della città. se la dimensione della città aumenta quindi il tempo.

+0

Sto impostando la dimensione della nuova generazione tramite -XX: MaxNewSize = 256m -XX: NewSize = 256m, quindi mi aspetto che sia uguale per entrambe le versioni – punx120