Après avoir remplacé le système d'exploitation de l'ordinateur de travail par Win7, mon myeclipse n'a pas été satisfaisant en démarrage et en vitesse d'exécution. Surtout lors de la modification et du débogage des modèles de plusieurs pages en même temps, le passage entre deux fichiers sera toujours bloqué pendant environ dix secondes. Essayer de désactiver divers plugins et de les vérifier ne vous aidera pas. Donc, après avoir étudié à peu près le JVM, j'ai décidé d'essayer de résoudre ce problème du point de vue du JVM.
Démarrer l'optimisation:
Tout d'abord, jetons un coup d'œil aux paramètres de démarrage par défaut dans MyEClipse.ini:
-Xmx512m: définissez la valeur maximale de mémoire de tas sur 512M
-Xx: maxpermSize = 256m: définissez la valeur maximale de la génération persistante à 256m
-Xx: réservéCodeCacheSize = 64m: Définissez la taille de la mémoire occupée par le code à 64m
Rien ne peut être vu à partir des paramètres de démarrage, alors ajoutez les paramètres pertinents pour l'impression des modifications de la mémoire:
-Xx: + printgctimestamps: imprimez l'horodatage de chaque GC
-Xx: + printgcdetails: imprimez des informations détaillées pour chaque GC
-Xloggc: myeclipsegc.log: Sortie des enregistrements GC dans le fichier
-Verbose: GC: Sortir la situation pertinente de chaque GC
Démarrez ensuite MyEclipse et vérifiez les informations dans myeclipsegc.log:
La startup prend environ 30 secondes. Intercepter sélectivement une petite partie des journaux. Vous pouvez voir qu'au cours des 10 premières secondes du démarrage de MyEclipse, le JVM a exécuté plus de 300 GC et 9 GC complets.
À partir de la fréquence et des informations GC, on peut voir que le taux de récupération de la mémoire est très élevé et que la taille s'ajuste constamment. Cela devrait être dû à un espace insuffisant dans la jeune génération, et une valeur initiale considérable est nécessaire.
Puis concentrez-vous sur GC complet:
Copiez le code comme suit: 5.961: [GC complet 5.961: [Tenuré: 34568K-> 34456K (49676K), 0.1397651 SECS] 35336K-> 34456K (53452K), [PERM: 26623K-> 26458K (26624k)], [Temps: utilisateur = 0,14 sys = 0,00, réel = 0,14 sec]
9.030: [GC complet 9.030: [Tenuré: 53310K-> 52332K (64588K), 0,2034757 SECS] 56020K-> 52332K (69516K), [PERM: 43007K-> 42996K (43008K)], 0,2036030 sys = 0,00, réel = 0,20 seconde]
D'après la comparaison des deux journaux, nous pouvons voir que le GC complet recycle principalement les deux zones de titulaire et de perm, et les tailles de ces deux zones sont constamment ajustées, nous avons donc décidé de fixer leur taille en premier.
Les paramètres ajustés sont donc les suivants:
-XMS512M: définissez la valeur minimale de la pile sur 512M
-XMN192M: Réglez la taille de la jeune génération à 192M
-Xx: permsize = 192m: définissez la valeur initiale de la génération persistante à 192M
-Xx: maxpermSize = 192m
-Xx: réservécodecachesize = 64m
-Xx: + printgctimestamps
-Xx: + printgcdetails
-Xloggc: myeclipsegc.log
-Verbose: GC
Redémarrez une fois MyEclipse pour afficher les informations du journal:
La startup a pris environ 12 secondes. D'après le journal, on peut voir que seulement 5 GC ont été effectués dans les 10 premières secondes, et aucun ajustement à la taille de chaque zone n'a été impliqué. Ce résultat est acceptable car il ne nécessite pas de redémarrages fréquents pendant le travail.
Optimisation de la vitesse de réponse au travail:
Ensuite, j'ai étudié les retards fréquents et les problèmes de cartes grosses lors du changement de fichiers HTML dans les deux sens qui m'avaient troublé pendant longtemps. Afin d'étudier plus intuitivement les changements de mémoire de JVM, j'ai décidé d'utiliser JConsole, un outil d'assistance qui est livré avec Java. Restaurez d'abord les paramètres de MyEClipse.ini pour éviter les interférences de la première étape de l'optimisation.
Démarrez MyEclipse, démarrez JConsole et connectez-vous au JVM où se trouve MyEclipse. Le diagramme de mémoire de l'ensemble du tas après l'écurie est le suivant:
Essayez ensuite d'ouvrir quelques modèles, puis d'observer les changements de mémoire.
Tout d'abord, l'utilisation globale de la mémoire du tas:
On peut voir qu'après avoir ouvert plusieurs modèles, l'utilisation de la mémoire du tas est soudainement passée de l'original inférieur à 100 m à plus de 300 m. L'utilisation a triplé, mais elle est toujours dans la gamme de 512 m que j'ai définie. Par conséquent, vous pouvez temporairement ne pas envisager de continuer à augmenter la mémoire du tas, mais envisagez plutôt d'ajuster le rapport de taille de mémoire de chaque zone.
Nous observons donc l'utilisation de la mémoire de chaque zone au cours de cette période, parmi laquelle la zone Eden est la suivante:
Le taux d'utilisation de la mémoire de la zone Eden a augmenté de manière significative au cours de cette période, et GC s'est produit plusieurs fois. Grâce aux informations de surveillance ci-dessous, nous pouvons savoir que, par défaut, la zone Eden alloue seulement 31 m de mémoire maximale, ce qui n'est évidemment pas suffisant. L'exécution d'un petit point déclenchera le GC dans la zone Eden. Cela devrait être l'une des raisons du retard de retard dans le commutateur d'ouverture du modèle et doit être ajusté.
Ensuite, la zone titulaire:
L'espace maximum alloué par JVM à cette zone par défaut est de 470 m. À mesure que l'utilisation de la mémoire change, la taille réelle de cette zone est constamment ajustée. Le GC complet se produira chaque fois que la taille de la zone est ajustée, ce qui devrait être l'une des raisons des gros blocs fréquents. L'ouverture du nouveau modèle est la principale raison de déclencher ce réglage. Du point de vue de l'utilisation de la mémoire dans ce domaine, il est toujours nécessaire de maintenir une certaine redondance en maintenant et en fixant l'espace mémoire dans cette zone à environ 450 m.
De ce point de vue, il est toujours nécessaire d'élargir la mémoire du tas de JVM pour maintenir une zone permanente plus grande et une zone d'Eden.
Enfin, jetons un coup d'œil à la zone permanente:
Dans le cadre de la zone de méthode, les changements de mémoire dans ce domaine ne sont pas grands et relativement stables, il n'est donc pas nécessaire de laisser trop de redondance. Cependant, étant donné que le volume de code réel du projet actuellement ouvert n'est pas important, il est décidé de le maintenir temporairement à environ 128 m et de l'ajuster lentement à l'avenir.
Ainsi, selon l'analyse ci-dessus, les paramètres sont ajustés à:
-Xmx768m
-XMS768M
-Xmn256m
-Xx: permsize = 192m
-Xx: maxpermSize = 192m
-Xx: réservécodecachesize = 64m
Redémarrez MyEclipse, connectez-vous à JConsole et ouvrez trente modèles en même temps pour faire le test. En regardant le taux d'utilisation de la mémoire de chaque zone, j'ai trouvé un problème. Après avoir ajusté la jeune génération à 256 m, puisque Eden ne se produit plus fréquemment dans GC, la quantité de données entrant dans la zone titulaire est considérablement réduite. Le diagramme d'utilisation de la mémoire de la zone titulaire est le suivant:
Comme le montre la figure ci-dessus, lorsque de nombreux modèles sont délibérément ouverts, l'espace de 450 m + n'utilise que moins de 250 m et le taux d'utilisation de l'espace est trop faible, donc les ajustements doivent être effectués.
Résumer
Ce qui précède est quelques idées et un processus de réglage réel pour moi pour régler ma myeclipse. En usage réel, j'ai fait quelques ajustements et personnalisations en fonction de mes préférences. Les paramètres finaux de MyEClipse.ini sont les suivants:
-vmargs
-Xmx512m
-XMS512M
-Xmn192m
-Xx: permsize = 128m
-Xx: maxpermSize = 128m
-Xx: réservécodecachesize = 64m
Dans le cadre de ce paramètre, la vitesse de réponse de MyEclipse est relativement garanti et la fréquence des différents décalages de retard est considérablement réduite. L'inconvénient est que la mémoire système occupée par le résident permanent est relativement élevée. Les étudiants qui aiment ouvrir plusieurs myeclipse en même temps peuvent faire des ajustements appropriés en fonction de leurs besoins et de leurs conditions réelles.
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.