Comme nous le savons tous, l'option java -Xmx
est utilisée pour définir l'espace de segment maximal disponible pour un programme Java. Mais existe-t-il un moyen pour un programme Java de lire la valeur qui a été définie? Quelque chose comme System.getMaximumHeapSpace()
(qui n'existe pas).Lecture de l'espace de segment maximal au moment de l'exécution
Répondre
Il existe un Runtime.maxMemory
qui, selon la documentation, renverra la quantité maximale de mémoire que la machine virtuelle Java tentera d'utiliser, mais il n'est pas spécifique s'il s'agit du maximum de mémoire de tas lors du lancement de la JVM.
Tout comme un test, j'ai écrit le programme suivant:
class MaxMemory {
public static void main(String[] args) {
System.out.println(Runtime.getRuntime().maxMemory());
}
}
Les résultats de l'exécution est la suivante:
C:\coobird\>java -Xmx64m MaxMemory
66650112
C:\coobird\>java -Xmx128m MaxMemory
133234688
Ce utilise Java SE version 6 1.6.0_12 sur Windows .
Bien que les valeurs soient proches de 64 Mo (67 108 864 octets) et de 128 Mo (134 217 728 octets), elles ne le sont pas exactement.
Je l'ai testé et il semble que ce soit la valeur définie par -Xmx. Merci. –
Il semble être proche, mais pas exactement la valeur. – coobird
Peut-être que les octets manquants ont été réservés pour l'espace PermGen –
Et je reçois des valeurs qui sont plus loin de la valeur Xmx:
java -Xmx64m MaxMemory
59703296
64 * 1024 * 1024 = 67108864
java -Xmx128m MaxMemory
119341056
128 * 1024 * 1024 = 134217728
C'est 11% de différence! (Le vôtre est seulement 0.7%, je gagne.)
java -version
java version "1.6.0_22"
Java(TM) SE Runtime Environment (build 1.6.0_22-b04)
Java HotSpot(TM) Server VM (build 17.1-b03, mixed mode)
running on Linux 2.6
Je vois des résultats similaires.
-Xmx512m et je reçois 455M
-Xmx1024m et je reçois 910M
-je obtenir les mêmes résultats en utilisant ManagementFactory.getMemoryMXBean(). GetHeapMemoryUsage()
Ces écarts sont beaucoup trop grandes pour Etre ignoré.
- 1. lignes de lecture 2 à un moment
- 2. Duplication de composants au moment de l'exécution
- 3. Relocalisation ELF au moment du chargement
- 4. Modifier app.config au moment de l'installation
- 5. clignote sur l'écran au moment de l'exécution
- 6. Vues iPhone au moment de l'exécution?
- 7. Commutateur MasterPageFile au moment de l'exécution
- 8. C# Assemblage introuvable au moment de l'exécution
- 9. Générer une image au moment de l'exécution
- 10. enregistrer le périphérique au moment de l'exécution
- 11. Choix de l'espace de nom 'using' au moment de l'exécution
- 12. Modification de LD_LIBRARY_PATH au moment de l'exécution pour ctypes
- 13. Exécution de PublicResXFileCodeGenerator au moment de la compilation
- 14. Valeur de permutation déterminée au moment de l'exécution dans C#
- 15. Désactiver l'effet de zoom CTRL/Roue au moment de l'exécution
- 16. Génération de l'assembly DLL dynamiquement au moment de l'exécution
- 17. Fichier de ressources modifiable au moment de l'exécution
- 18. ISR - Débit de données maximal
- 19. Implémentation de l'arborescence Segment Java
- 20. Quota maximal de longueur de tableau
- 21. Ajout de fichiers au chemin de classe java au moment de l'exécution
- 22. Structure de segment de recherche consultable
- 23. Comment vérifier si SqlCacheDependency est activé au moment de l'exécution?
- 24. Tests unitaires avec nez: tests au moment de la compilation?
- 25. Comment puis-je convertir des types au moment de l'exécution?
- 26. Afficher la barre de progression au moment du traitement
- 27. Modifier le style d'élément ListBox au moment de l'exécution
- 28. C++ modifier les ressources au moment de l'exécution
- 29. log4net active la journalisation du débogage au moment de l'exécution
- 30. Définition d'une page maître ASP.NET au moment de l'exécution
Duplicata de http://stackoverflow.com/questions/433406/how-to-get-the-max-sizes-of-the-heap-and-permgen-fr-the-jvm? – Pool
Un moyen non-programmatique est d'exécuter l'utilitaire 'jmap' disponible à partir de votre JDK. La syntaxe serait 'jmap -heap'. Le champ 'MaxHeapSize' indique la valeur' Xmx' définie sur ce processus Java. –
asgs