Maison  >  Article  >  Java  >  Exemple d'analyse des problèmes de mémoire lors de la configuration d'Eclipse.ini en Java

Exemple d'analyse des problèmes de mémoire lors de la configuration d'Eclipse.ini en Java

Y2J
Y2Joriginal
2017-04-26 10:09:221427parcourir

Cet article est une analyse détaillée et une introduction au problème des paramètres de mémoire d'Eclipse.ini. Les amis dans le besoin peuvent s'y référer

-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
Il y a plusieurs questions ici :
1. Que signifie chaque paramètre ?
2. Pourquoi Eclipse peut-il démarrer sur certaines machines après avoir défini -Xmx et -XX:MaxPermSize sur 512 Mo, mais ne peut pas le faire sur certaines machines ?
3. Pourquoi Eclipse n'effectue-t-il pas les paramètres correspondants lors de l'écriture des paramètres ci-dessus dans le fichier Eclipse.ini ?
Répondons-y un par un
1. Quelle est la signification de chaque paramètre ?
-vmargs dans le paramètre signifie définir les paramètres JVM, donc ce qui suit sont en fait des paramètres JVM. Nous comprenons d'abord le mécanisme de gestion de la mémoire JVM, puis expliquons la signification de chaque paramètre.
Mémoire tas et non tas
Selon la déclaration officielle : "La machine virtuelle Java a un tas. Le tas est la zone de données d'exécution, et la mémoire de toutes les instances de classe et tableaux est allouée à partir d'ici. . Le tas est créé au démarrage de la machine virtuelle Java. "La mémoire en dehors du tas dans la JVM est appelée mémoire non tas." On constate que la JVM gère principalement deux types de mémoire : tas et non tas. En termes simples, le tas est la mémoire accessible au code Java et est réservée aux développeurs ; le non-heap est la mémoire réservée à la JVM pour son propre usage, donc la mémoire requise pour la zone de méthode et le traitement ou l'optimisation interne de la JVM (comme cache de code compilé JIT), chaque structure de classe (telle que le pool de constantes d'exécution, les données de champ et de méthode) et le code des méthodes et des constructeurs sont tous dans la mémoire hors tas.
Allocation de mémoire du tas
La mémoire initiale allouée par la JVM est spécifiée par -Xms, et la valeur par défaut est 1/64 de la mémoire physique ; la mémoire maximale allouée par la JVM est spécifiée par -Xmx, et la valeur par défaut est représente 1/4 de la mémoire physique. Par défaut, lorsque la mémoire du tas libre est inférieure à 40 %, la JVM augmentera le tas jusqu'à la limite maximale de -Xmx ; lorsque la mémoire du tas libre est supérieure à 70 %, la JVM réduira le tas jusqu'à la limite minimale de -Xms. Par conséquent, le serveur définit généralement -Xms et -Xmx comme étant égaux pour éviter d'ajuster la taille du tas après chaque GC.
Allocation de mémoire non tas
JVM utilise -XX:PermSize pour définir la valeur initiale de la mémoire non tas, la valeur par défaut est 1/64 de la mémoire physique XX:MaxPermSize définit la taille maximale de la mémoire non tas ; , la valeur par défaut est 1/64 de la mémoire physique /4.
Limite de mémoire JVM (valeur maximale)
Tout d'abord, la mémoire JVM est limitée à la mémoire physique maximale réelle (un non-sens ! Haha en supposant que la mémoire physique est infinie, la valeur maximale de la mémoire JVM en a beaucoup). à voir avec le système d'exploitation. Pour faire simple, bien que l'espace mémoire contrôlable d'un processeur 32 bits soit de 4 Go, le système d'exploitation spécifique fixera une limite. Cette limite est généralement de 2 Go à 3 Go (en général, elle est de 1,5G-2G sous les systèmes Windows et de 1,5). G-2G sous les systèmes Linux). 2G-3G), et il n'y aura aucune restriction sur les processeurs supérieurs à 64 bits.
2.Pourquoi Eclipse peut-il démarrer sur certaines machines après avoir défini -Xmx et -XX:MaxPermSize sur 512M, alors que certaines machines ne le peuvent pas ?
Grâce à l'introduction ci-dessus de la gestion de la mémoire JVM, nous avons appris que la mémoire JVM comprend deux types : la mémoire tas et la mémoire non tas. De plus, la mémoire maximale de la JVM dépend d'abord de la mémoire physique réelle et du système d'exploitation. Ainsi, la définition des paramètres de la VM entraîne l'échec du démarrage du programme principalement pour les raisons suivantes :
1) La valeur de -Xms dans le paramètre est supérieure à -Xmx, ou la valeur de - XX:PermSize est supérieur à -XX :MaxPermSize
2) La somme des valeurs de -Xmx et -XX:MaxPermSize dépasse la limite maximale de la mémoire JVM, telle que la limite maximale de mémoire du système d'exploitation actuel, ou mémoire physique réelle, etc. En parlant de mémoire physique réelle, une chose à noter ici est que si votre mémoire est de 1 024 Mo, il se peut qu'elle ne soit pas 1 024 Mo utilisée dans le système réel, car une partie de celle-ci est occupée par le matériel.
3.Pourquoi Eclipse n'effectue-t-il pas les paramètres correspondants lors de l'écriture des paramètres ci-dessus dans le fichier Eclipse.ini ?
Alors pourquoi le même paramètre est-il valide dans le raccourci ou la ligne de commande mais invalide dans le fichier Eclipse.ini ? C'est parce que nous n'avons pas suivi les règles de paramétrage du fichier Eclipse.ini :
Les paramètres sont sous la forme de "valeur de l'élément". S'il y a des espaces au milieu, ils doivent être écrits sur une nouvelle ligne. S'il y a des espaces dans la valeur, ils doivent être placés entre guillemets. Par exemple, nous utilisons le paramètre -vm C:Javajre1.6.0binjavaw.exe pour configurer la machine virtuelle. Dans le fichier Eclipse.ini, il doit être écrit comme ceci :
-vm
C. :Javajre1.6.0binjavaw.exe
Comme mentionné ci-dessus, les paramètres finaux dans Eclipse.ini peuvent être écrits comme ceci :
-vmargs
-Xms128M
-Xmx512M
-XX :PermSize=64M
-XX :MaxPermSize=128M
Les résultats d'exécution réels peuvent être consultés via le bouton "Détails de configuration" dans la fenêtre "Aide" - "À propos du SDK Eclipse" dans Eclipse.
Il convient également de noter que le contenu du fichier Eclipse.ini inclus dans le package compressé Eclipse est le suivant :
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
-vmargs
-Xms40m
-Xmx256m
Parmi eux –launcher.XXMaxPermSize (notez qu'il y a deux lignes de connexion à l'avant) et -XX:MaxPermSize ont fondamentalement la même signification. Je pense que la seule différence est que le premier est le paramètre défini au démarrage d'Eclipse.exe, tandis que le second est le paramètre dans la JVM utilisée par Eclipse. En fait, définissez simplement l'un des deux, vous pouvez donc ici commenter –launcher.XXMaxPermSize et la ligne suivante avec #.
3. Autres paramètres de démarrage. Si vous disposez d'un processeur dual-core, vous pouvez essayer ce paramètre :
-XX:+UseParallelGC
pour accélérer l'exécution du GC. (Juste un paramètre nouvellement ajouté pour GC dans JDK 5)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn