Réglage de la taille de segment JVM au moment de l'exécution
Est-il un moyen de définir la taille du segment de l'exécution d'un programme Java?
- Pour référence, voici la RFE pour hotspot: bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408373
Vous devez vous connecter pour publier un commentaire.
Pas.
Ce que vous pouvez faire avec une application très variable tas exigences est de définir votre tas max taille très haute avec
-Xmx
et tune-XX:MaxHeapFreeRatio
et-XX:MinHeapFreeRatio
de sorte que l'application ne sera pas s'accrocher à un lot de la mémoire lorsque le tas se rétrécit (il le fait avec les paramètres 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, vous êtes mieux de l'avoir à s'accrocher à la mémoire plutôt que de les rendre à l'OS de la réclamer à nouveau une seconde plus tard. Vous pouvez également jouer avec le GC options pour s'assurer que le GC ne laisse pas de trop non réclamés objets qui traînent, qu'il tend à faire quand il y a beaucoup de place pour le tas de croître, et qui irait à l'encontre de l'objectif de vouloir la taille de segment de mémoire pour s'ajuster à l'application de ses besoins.
Selon http://www.dreamincode.net/forums/showtopic96263.htm, vous ne pouvez pas le faire au moment de l'exécution, mais vous pouvez en générer un autre processus avec un autre segment de taille.
Vous pouvez modifier ces paramètres lorsque vous démarrez votre application, mais une fois que la JVM est en place et l'exécution de ces valeurs ne peut pas être modifié. Quelque chose comme ceci:
va définir le minimum de la taille de segment de mémoire de 32 mo et la taille maximale du tas de 512 MO. Une fois défini, vous ne pouvez pas les modifier dans le programme en cours d'exécution.
Le consensus peut en effet être que ce n'est pas possible, mais nous devrions être à la recherche à la JVM de la source pour voir comment il peut être ergonomique contrôlée. Il serait très agréable d'être en mesure d'avoir un JVMTI agent d'être en mesure d'ajuster le tas/perm/permanent/new/&c dimensionnement en ligne/au moment de l'exécution.
Ce que ce serait faire? il serait de permettre aux agents de déduire de dimensionnement des ajustements en fonction du rendement ou de l'empreinte des objectifs qui seront importants lors du déplacement de machines virtuelles dans le Cloud.
Vous pouvez utiliser le -mx option de démarrage (aussi connu comme -Xmx) C'est la taille maximale que vous devriez dans la cause qui vous ne devriez pas besoin de plus que la taille maximale que vous aurez jamais besoin.
Cependant, un travail autour est d'avoir le main() vérifier la taille maximale et redémarrez le java si la taille maximale n'est pas comme souhaité. c'est à dire lancer un autre programme java et mourir.
J'ai demandé la même question à moi-même. Et contrairement aux réponses ci-dessus il y a quelque chose que je peux faire à ce sujet mon application croissante max tas de la JVM taille. Si l'application est un serveur web en mode cluster, j'ai pu démarrer une nouvelle instance avec le changement des min/max de la taille du segment et que l'arrêt de l'instance initiale. Qui doit être particulièrement simple dans GlassFish où vous avez la gestion d'instance séparée de nodeAgent(serveur d'application d'une instance de cluster) de la JVM.
Depuis de nombreuses JVM applications sont des applications web, je pense qu'il vaut la peine de préserver dans ce blog.
Si je comprends votre question correctement, vous essayez de modifier la taille de segment de mémoire à runtime. Je ne vois pas pourquoi cela devrait être possible. Définissez la taille de segment de mémoire à de démarrage à l'aide de la
-Xmx
option JVM. Je conseille aussi à vous de définir le-Xms
option uniquement si vous avez absolument besoin. Cette option définit le montant initial de la tête de la mémoire est allouée pour la JVM.Vous devez savoir comment votre application se comporte en termes de mémoire. Définir la valeur de
-Xmx
à bon escient. Si votre application est une sorte de serveur d'application, vous pouvez définir une valeur plus élevée, sinon compromettre votre choix avec d'autres applications en cours d'exécution dans les machines client et bien sûr de la mémoire disponible.