Est-il possible de changer/modifier/ajouter des paramètres VM après que la JVM est déjà chargée (en cours d'exécution)? Si oui, comment puis-je le faire?
Pour les propriétés que vous définissez via le -D
drapeau sur la ligne de commande, vous voulez System.setProperty . Par exemple:
System.setProperty("propname", "hello world");
// ... later ...
String value = System.getProperty("propname");
Mise à jour:
Vous ne pouvez pas activer le débogage de manière dynamique, mais vous pouvez activer le débogage au démarrage mais attacher un débogueur plus tard. Avec ce qui suit, vous pouvez écouter sur le port 12345 et démarrer immédiatement votre programme (via suspend=n
). Ensuite, vous pouvez attacher un débogueur si/quand vous en avez besoin, détacher le débogueur, attacher à nouveau plus tard, etc.
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=12345
Bien sûr, cela nuit aux performances même lorsque le débogueur n'est pas connecté, il ne fonctionne donc bien que dans le code de développement/test, pas dans la production. Pour cela, vous souhaitez vous connecter, par ex. log4j .
Une réponse courte est que vous ne pouvez pas modifier les paramètres VM lors de l'exécution. La classe Runtime expose certaines options telles que la mémoire max. Les principaux paramètres tels que la mémoire max ne doivent être définis que par un type d'administrateur permettant la gestion de ressources lorsque plusieurs machines JVM coexistent sur une machine. Permettre à une machine JVM d'être gourmande et de demander des lots et des lots de plus qu'elle ne lui était allouée éliminerait cette contrainte.