Définition de la taille de segment JVM lors de l’exécution

Existe-t-il un moyen de définir la taille de segment de mémoire à partir d’un programme Java en cours d’exécution?

Non.

Ce que vous pouvez faire avec une application qui a des exigences de tas très variables est de définir une taille de tas maximale avec -Xmx et tune -XX:MaxHeapFreeRatio et -XX:MinHeapFreeRatio pour que l’application ne -XX:MinHeapFreeRatio pas beaucoup de mémoire lorsque le tas se réduit (il le fait avec les parameters par défaut).

Mais notez que cela peut entraîner des problèmes de performances lorsque la mémoire réellement utilisée par l’application varie fortement et rapidement – dans ce cas, il est préférable de la conserver en mémoire plutôt que de la restituer au système d’exploitation pour la réclamer. encore une seconde plus tard. Vous voudrez peut-être aussi jouer avec les options du GC pour vous assurer que le GC ne laisse pas trop d’objects non réclamés, ce qui a tendance à se multiplier, ce qui irait à l’encontre de l’objective de vouloir que la taille du tas s’adapte aux besoins de l’application.

Selon http://www.dreamincode.net/forums/showtopic96263.htm , vous ne pouvez pas le faire lors de l’exécution, mais vous pouvez générer un autre processus avec une taille de segment différente.

Vous pouvez modifier ces parameters lorsque vous démarrez votre application, mais une fois que la JVM est active, ces valeurs ne peuvent plus être modifiées. Quelque chose comme ça:

java -Xms32m -Xmx512m FooBar

définira la taille minimale du segment de mémoire à 32 Mo et la taille maximale du segment de mémoire à 512 Mo. Une fois ceux-ci définis, vous ne pouvez plus les modifier dans le programme en cours d’exécution.

Le consensus est peut-être que ce n’est pas possible, mais nous devrions examiner la source de la JVM pour voir comment elle peut être contrôlée de manière ergonomique. Ce serait très bien de pouvoir avoir un agent JVMTI capable d’ajuster le taille de tas / perm / tenured / new / & c en ligne / à l’exécution.

Qu’est-ce que cela ferait? Cela permettrait aux agents d’inférer les ajustements de dimensionnement en fonction des objectives de performance ou d’empreinte, ce qui sera important lors du déplacement des JVM dans le Cloud.

Vous pouvez utiliser l’option -mx au démarrage (également appelée -Xmx ). Il s’agit de la taille maximale dont vous ne devriez jamais avoir besoin, pour laquelle vous ne devriez pas avoir besoin de la taille maximale requirejse .

Cependant, un travail consiste à faire en sorte que main () vérifie la taille maximale et redémarre le Java si la taille maximale n’est pas celle désirée. c’est-à-dire démarrer un autre programme Java et mourir.

Je me suis posé la même question. Et contrairement aux réponses ci-dessus, il y a quelque chose que je peux faire à propos de mon application en augmentant la taille maximale de la machine virtuelle Java. Si l’application est un serveur Web en mode cluster, je pourrais démarrer une nouvelle instance avec une taille de segment de mémoire min / max modifiée et une instance initiale d’arrêt. Cela doit être particulièrement simple dans GlassFish où vous avez une instance de gestion séparée de JVM nodeAgent (instance de cluster du serveur d’applications).

Étant donné que de nombreuses applications JVM sont des applications Web, je pense que cela vaut la peine de le conserver dans ce blog.

java -Xmx500m au démarrage uniquement

Si je comprends bien votre question, vous essayez de modifier la taille du tas lors de l’ exécution . Je ne vois aucune raison pour laquelle cela devrait être possible. Définissez la taille de -Xmx au démarrage à l’aide de l’option JVM -Xmx . Je vous conseille également de définir l’option -Xms uniquement si vous en avez absolument besoin. Cette option définit la quantité initiale de mémoire principale allouée à la machine virtuelle Java.

Vous devez savoir comment votre application se comporte en termes de mémoire. Définissez judicieusement la valeur de -Xmx . Si votre application est une sorte d’application de serveur, vous pouvez définir une valeur plus élevée, sinon compromettre votre choix avec d’autres applications possibles exécutées sur les ordinateurs clients et, bien sûr, la mémoire disponible.