80 votes

Java 7 (JDK 7) collecte des ordures et de la documentation

Java 7 a été pendant un certain temps maintenant, mais je ne trouve pas de bonnes sources d'informations sur la configuration de l' garbage collectors, en particulier la nouvelle G1 collector. Mes questions:

  1. Est G1 par défaut collector de Java 7 et si non, comment puis-je activer G1?
  2. Quels paramètres facultatifs ne g1 ont en Java7?
  3. Y avait-il des changements apportés à d'autres collectionneurs comme cms ou parallel collector dans Java 7?
  4. Où puis-je trouver de la bonne documentation sur garbage collection dans Java 7?

47voto

Carey Points 823

Le G1 garbage collector n'est pas la valeur par défaut dans mon installation de Java, version 1.7.0_01. Vous pouvez voir par vous-même en utilisant des options de ligne de commande:

> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version
-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:ParallelGCThreads=4 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
Heap
 PSYoungGen      total 37696K, used 1293K [0x00000007d5eb0000, 0x00000007d88c0000, 0x0000000800000000)
  eden space 32320K, 4% used [0x00000007d5eb0000,0x00000007d5ff3408,0x00000007d7e40000)
  from space 5376K, 0% used [0x00000007d8380000,0x00000007d8380000,0x00000007d88c0000)
  to   space 5376K, 0% used [0x00000007d7e40000,0x00000007d7e40000,0x00000007d8380000)
 PSOldGen        total 86144K, used 0K [0x0000000781c00000, 0x0000000787020000, 0x00000007d5eb0000)
  object space 86144K, 0% used [0x0000000781c00000,0x0000000781c00000,0x0000000787020000)
 PSPermGen       total 21248K, used 2032K [0x000000077ca00000, 0x000000077dec0000, 0x0000000781c00000)
  object space 21248K, 9% used [0x000000077ca00000,0x000000077cbfc288,0x000000077dec0000)

Vous n'avez pas besoin d'activer les options expérimentales à son tour sur le G1 collecteur de plus, si:

> java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseG1GC -version
-XX:InitialHeapSize=132304640 -XX:MaxHeapSize=2116874240 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation
java version "1.7.0_01"
Java(TM) SE Runtime Environment (build 1.7.0_01-b08)
Java HotSpot(TM) 64-Bit Server VM (build 21.1-b02, mixed mode)
Heap
 garbage-first heap   total 130048K, used 0K [0x000000077ca00000, 0x0000000784900000, 0x00000007fae00000)
  region size 1024K, 1 young (1024K), 0 survivors (0K)
 compacting perm gen  total 20480K, used 2032K [0x00000007fae00000, 0x00000007fc200000, 0x0000000800000000)
   the space 20480K,   9% used [0x00000007fae00000, 0x00000007faffc288, 0x00000007faffc400, 0x00000007fc200000)
No shared spaces configured.

Je ne sais pas où vous pouvez trouver une bonne documentation.

31voto

Florakel Points 571

Oracle a finalement fait G1 officiel dans Java 7 U4: http://www.oracle.com/technetwork/java/javase/7u4-relnotes-1575007.html

Description: http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

Options de ligne de commande: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#G1Options

Pourtant, je ne pense pas que c'est la valeur par défaut collector de Java 7. Pour les serveurs par défaut est le Parallèle Collector comme dans la version 6 de Java.

22voto

Wojtek O. Points 3267

Oui, G1 est la nouvelle norme garbage collector de Java 1.7 JVM.

Ici vous pouvez trouver beaucoup d'informations sur la façon d'utiliser et de configre le nouveau garbage collector:

À l'aide de G1 G1 est encore considéré comme expérimental et peut être activée avec les les deux paramètres suivants:

-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC

Pour définir une table des temps de pause objectif, utilisez le paramètre suivant:

-XX:MaxGCPauseMillis =50 (pour un temps de pause de la cible de 50ms)

Avec G1, un intervalle de temps peut être spécifié au cours de laquelle un GC pause ne devrait pas durer plus longtemps que le temps donné ci-dessus:

-XX:GCPauseIntervalMillis =200 (pour un temps de pause de la cible de 200ms)

Notez que les deux options ci-dessus représentent des buts qui ne sont pas des promesses ou des des garanties. Ils peuvent fonctionner correctement dans certaines situations mais pas dans d'autres, et le GC peut ne pas toujours être en mesure de leur obéir.

Sinon, la taille de la jeune génération peut être spécifié explicitement à l'impact d'évacuation des temps de pause:

-XX:+G1YoungGenSize=512m (512 mo jeune génération)

G1 utilise également l'équivalent de survivant espaces, qui sont, naturellement, un ensemble de (potentiellement non contiguës) régions. Leur taille peut être spécifié avec des paramètres habituels (par exemple, -XX:SurvivorRatio=6).

Enfin, pour exécuter G1 à son plein potentiel, essayez de définir ces deux les paramètres qui sont actuellement désactivés par défaut, car ils peuvent découvrir une rare condition de course:

-XX:+G1ParallelRSetUpdatingEnabled -XX:+G1ParallelRSetScanningEnabled

Une chose à noter est que G1 est très détaillé par rapport à d'autres HotSpot GCs quand -XX:+PrintGCDetails est réglé. C'est parce qu'il imprime par GC-thread horaires et autres renseignements très utiles dans profilage et le dépannage. Si vous voulez un plus concis GC journal, s'il vous plaît activer à l'aide d'-verbosegc (même s'il est recommandé la plus détaillée GC journal).

J'ai aussi trouvé cet article très utile dans la compréhension des ampoules de G1.

Encore plus d'infos ici.

13voto

Luke Usherwood Points 687

1. Est G1 par défaut collector de Java 7 (...)

La règle sur ce Java 5 de la page est toujours en vigueur dans Java 7 (et autant que je sache, Java 8):

Sur le serveur de classe des machines exécutant le serveur de VM, le garbage collector (GC) a changé à partir de la précédente série collector (-XX:+UseSerialGC) à un collecteur parallèle (-XX:+UseParallelGC).

Mais aussi considérer:

  • 64-bit Jvm ne viennent pas avec un -client VM, sont donc toujours "de la classe de serveur"
  • Depuis Java 7, aide -XX:+UseParallelGC (défini ou implicite) en outre, implique -XX:+UseParallelOldGC (c'est à dire, sauf si explicitement désactivé)

Par exemple, si sur x64 de Windows que vous exécutez...

  • Java 7 64-bit, vous obtenez Parallèle GC (à la fois pour les jeunes et les anciennes générations) par défaut.
  • Java 8 32 bits, vous obtenez la Série GC (pour les deux générations) par défaut

1. (...) comment puis-je activer G1?

Comme de Java 7, il suffit de -XX:+UseG1GC. Peut-être aussi de l'intérêt est quand vous voulez:

Applications en cours d'exécution aujourd'hui avec le CMS ou le ParallelOld garbage collector serait à l'avantage de commutation à G1 si l'application dispose d'une ou plusieurs des caractéristiques suivantes.

  • Plus de 50% du segment Java est occupé avec des données en direct.
  • Le taux de répartition des objets ou des taux de promotion varie considérablement.
  • Indésirables long de la collecte des ordures ou le compactage des pauses (plus que de 0,5 à 1 seconde)

2. Quels paramètres facultatifs ne g1 ont en Java7?

Je n'ai pas utilisé G1 moi-même, mais je déduis qu'il adhère à la même base "débit / ergonomique" les indicateurs utilisés pour régler l'parallèlement d'autres collectionneurs. Dans mon expérience avec le Parallèle GC, -XX:GCTimeRatio a été le pivot, l'un dans la fourniture de la vitesse attendue-de la mémoire compromis. YMMV.

G1-options spécifiques sont répertoriés ici

3. Ont été il y a des changements à (...) de la cms ou de la parallèle le collecteur, en Java 7?

Ne sais pas, mais...

G1 est prévu sur le long terme de remplacement pour la Concurrente de Mark-Sweep Collecteur (CMS)

4. Où puis-je trouver de la bonne documentation sur la collecte des ordures dans Java 7?

Il peut être une douleur à trouver, ne peut-il pas? Probablement le meilleur "hub" de la page que j'ai trouvé est celui-ci:

http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140228.html

Une lecture nécessaire, mais vaut le temps si vous avez besoin de faire quelques réglages. Particulièrement perspicace: Garbage Collector Ergonomie

2voto

IceMan Points 507

La documentation disponible à l' http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html (le lien fourni par Wojtek) semble être le seul lien officiel avec des informations, mais l'info semble dépassée que certaines des options mentionnées n'étaient disponibles que dans les versions de test, ils n'existent plus dans la production de rejets. Quelqu'un à partir d'Oracle devrait fournir des mises à jour de la documentation sur le G1 GC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X