2011-06-04 2 views
20

Ho alcune domande sull'algoritmo del GC: Per prima cosa quando utilizziamo i parametri UseSerialGC, UseParallelGC, UseParallelOldGC e così via, specifichiamo un algoritmo GC. Ognuno di loro può fare GC in tutte le generazioni, giusto?qual è la differenza tra ParallelGC e ParallelOldGC?

Ad esempio, se si utilizza "java -XX: + UseSerialGC", tutte le generazioni utilizzeranno GC seriale come Algoritmo GC.

Secondo posso utilizzare ParallelGC in Old Gneneration e utilizzare SerialGC nella generazione di yong?

L'ultimo come titolo qual è la differenza tra ParallelGC e ParallelOldGC?

risposta

16

Date un'occhiata al HotSpot VM Options:

-XX: + UseParallelGC = Usa garbage collection parallela per distrugge. (Introdotto in 1.4.1).

-XX: + UseParallelOldGC = Usa la garbage collection parallela per le raccolte complete. L'abilitazione di questa opzione imposta automaticamente -XX: + UseParallelGC. (Introdotto nell'aggiornamento 5.0 6.)

dove Scavenges = Giovane generazione GC.

+0

dove su quella pagina risponde Q 1 e 2? Non riesco a vederlo! –

+0

grazie. E qual è la differenza tra ParNew GC e Parallel GC? So che c'è già una risposta in stackOverflow. Ma non ho capito. Puoi aiutarmi? – leo

+1

La prima tabella mostra i diversi algoritmi di raccolta GC per le generazioni giovani e meno giovani. http://blog.ragozin.info/2011/07/hotspot-jvm-garbage-collection-options.html – Nathan

10

Per rispondere alla tua domanda, dobbiamo capire il diverso algoritmo JVM fornisce quattro garbage collection.

  • Il garbage collector seriale
  • La portata collettore
  • Il collettore CMS
  • Il G1 collettore

Il collettore seriale sia abilitata utilizzando il -XX: + UseSerialGC bandiera (sebbene di solito è l'impostazione predefinita in quei casi in cui potrebbe essere utilizzato).

Il garbage collector seriale è il collettore predefinito se l'applicazione è in esecuzione su un computer client-classe (JVM a 32 bit in Windows o singleprocessor macchine) .Il collettore seriale utilizza un singolo thread per elaborare il cumulo. Arresta tutti i thread dell'applicazione mentre l'heap viene elaborato (per un GC secondario o completo). Durante un GC completo, lo compatta completamente la vecchia generazione.

UseParallelGC, UseParallelOldGC fanno parte del collettore di velocità effettiva che è l'impostazione predefinita per macchine Unix multi-CPU e qualsiasi JVM a 64 bit.

Il raccoglitore di throughput utilizza più thread per raccogliere la generazione giovane, che rende GC minori molto più veloce rispetto a quando viene utilizzato il collector seriale. Il raccoglitore del throughput può utilizzare più thread per elaborare anche la vecchia generazione. Questo è il comportamento predefinito di in JDK 7u4 e versioni successive e tale comportamento può essere attivato nelle JVK JDK 7 specificando il flag -XX: + UseParallelOldGC. Poiché utilizza più thread, , il raccoglitore di throughput viene spesso chiamato collettore parallelo.

Dal momento che è il default nella maggior parte delle situazioni in cui potrebbe essere utilizzato, non deve essere abilitato in modo esplicito. Per abilitarlo dove necessario, utilizzare i flag -XX: + UseParallelGC -XX: + UseParallelOldGC

--Pinaki

+0

Perché qualcuno dovrebbe usare -XX: + UseParallelGC over -XX: + UseParallelOldGC, poiché il primo implica già che hanno thread risparmiare – Abdul

1

Quelli sono due politiche GC applicati alle diverse regioni di un mucchio Java cioè Nuovo e Vecchio generazioni. Ecco un link che aiuta a chiarire quali opzioni implicano altre. È utile soprattutto quando si inizia a capire cosa si ottiene quando si specifica ParallelOldGC o ParNewGC. http://www.fasterj.com/articles/oraclecollectors1.shtml