2017-10-16 8 views
0

J'ai un processus, où je consomme très peu de mémoire dans l'ancien espace de génération. Pour cette raison, beaucoup de mémoire est gaspillée. J'ai essayé de régler l'ancien espace de génération en utilisant le paramètre NewRatio mais je n'ai pas pu le réduire en dessous de 1. Même après l'avoir réglé sur 1, il y a beaucoup d'espace dans la zone old gen qui n'est pas utilisée.Valeur minimale de NewRatio dans le réglage du tas java

Y at-il un moyen/config pour réduire la taille de l'ancien espace de génération sans réduire la taille de la jeune génération?

Merci, Nitin Goswami

Répondre

0

Vous pouvez contrôler la taille du tas avec les paramètres JVM suivants:

-Xmsvalue

-Xmxvalue

-XX: MinHeapFreeRatio = minimum

-XX: MaxHeapFreeRatio = maximum

-XX: NewRatio = rapport

-XX: NewSize = taille

-XX: MaxNewSize = taille

-XX: + AggressiveHeap

Les -Xms et les paramètres définissent la -Xmx tailles de tas minimales et maximales, respectivement. Comme le GC se produit lorsque les générations se remplissent, le débit est inversement proportionnel à la quantité de mémoire disponible. Par défaut, la JVM augmente ou réduit le tas de chaque GC pour essayer de conserver la proportion d'espace libre aux objets vivants de chaque collection dans une plage spécifique. Cette plage est définie en pourcentage par les paramètres -XX: MinHeapFreeRatio = minimum et -XX: MaxHeapFreeRatio = maximum; et la taille totale délimitée par -Xms et -Xmx.

Définissez les valeurs de -Xms et -Xmx comme étant égales pour une taille de segment de mémoire fixe. Lorsque le tas augmente ou diminue, la machine virtuelle Java doit recalculer les anciennes et les nouvelles tailles de génération afin de conserver un NewRatio prédéfini.

Les paramètres NewSize et MaxNewSize contrôlent la taille minimale et maximale de la nouvelle génération. Réglez la nouvelle taille de la génération en réglant ces paramètres de manière égale. Plus la génération est jeune, moins il y a de collections mineures. La taille de la jeune génération par rapport à l'ancienne génération est contrôlée par NewRatio. Par exemple, la valeur -XX: NewRatio = 3 signifie que le rapport entre l'ancienne et la jeune génération est de 1: 3, la taille combinée d'eden et des espaces survivants sera le quart du tas.

Par défaut, le serveur d'applications est appelé avec la machine JVM Java HotSpot Server. La valeur NewRatio par défaut pour la machine JVM du serveur est 2: l'ancienne génération occupe les 2/3 du tas tandis que la nouvelle génération occupe 1/3. La nouvelle génération plus grande peut accueillir beaucoup plus d'objets de courte durée, ce qui réduit le besoin de collections majeures lentes. L'ancienne génération est encore suffisamment grande pour contenir de nombreux objets à vie longue.

Pour la taille du tas Java:

fixe le montant total de la mémoire vous pouvez vous permettre de la machine virtuelle Java. En conséquence, tracer votre propre mesure de performance par rapport aux jeunes générations pour trouver le meilleur réglage.

Mettez beaucoup de mémoire à la disposition de la jeune génération. La valeur par défaut est calculée à partir de NewRatio et du paramètre -Xmx.

De plus grands espaces d'éden ou de génération plus jeunes augmentent l'espacement entre les GC complets. Mais les jeunes collections spatiales pourraient prendre un temps proportionnellement plus long. En général, gardez la taille d'eden entre un quart et un tiers de la taille maximale du tas. L'ancienne génération doit être plus grande que la nouvelle génération.