Je viens d'essayer l'option Généralement, l'application peut fonctionner avec 256 Mo de tas, mais génère Je pensais que cette analyse d'évacuation pourrait vous aider, donc j'ai activé l'option et réaffecter l'application. J'ai constaté que l'application est devenue de plus en plus incapable de dégager la poubelle qu'elle avait collectée jusqu'à ce qu'elle semblait éventuellement à dépenser le tout le temps em> faire du GC et que l'application était "Flatlining" à sa répartition complète. P>
À ce stade, je devrais dire que l'application n'a pas lancé un J'ai ensuite supprimé l'option et redémarré et l'application est devenue "normale" à nouveau! Quelqu'un a une idée de ce qui pourrait se passer? P> -xx: + decapeanalyse code> activé sur un JDK6-U18 strong> vm (sur Solaris) et a eu une expérience plutôt décevante. Je gère une application Scala qui a plutôt beaucoup d'acteurs (20 000 d'entre eux). Ceci est une recette de création des ordures! P>
OutofMemoryError code> que j'aurais attendu. Peut-être que
jconsole code> (que j'utilisais pour effectuer l'analyse) n'affiche pas correctement les statistiques GC avec cette option (je ne suis pas convaincu)? P>
3 Réponses :
1 fort> L'analyse d'évasion s'est-elle présentée comme étant activée dans JConsole? Vous devez vous assurer que vous exécutez la machine virtuelle avec l'option -Server. Je suppose que vous avez eu ce travail, mais je pensais juste que je vérifiais. dans l'exemple ci-dessus le rendrait si < Strong> 4 strong> Vous pouvez essayer le collecteur G1GARGAGE que vous pouvez l'activer avec: p> omhugeObject code> pourrait être attribué sur le pile au lieu du tas et donc ne pas créer des ordures. Je ne pense pas qu'il est probable que l'analyse d'évasion aidera avec les acteurs. Leurs références "échapperont toujours" au sous-système Acteur. P>
-xx: + Unlockexperimentalvmoptions -XX: + UtilisationG1GC P> P> P> P> P> P> P> P> P> P> P> P> P >
Si ce sont des objets transférés d'un thread à un autre, non seulement l'allocation de pile sera impossible, je suppose que les tampons d'allocation locaux de fil (TLAB) seront également abordés. Je crois que la JRockit JVM est encore plus agressive avec son comportement de mémoire du fil-local.
Je ne m'attends pas à ce que l'analyse d'évacuation puisse aider avec les acteurs en soi i>, mais il y a beaucoup d'autres conversions implicites sur l'application sur la pile qui pourrait être élue. J'espérais juste faire une sorte de dent dans les frais généraux de GC!
Le problème avec G1 est qu'il est impossible d'utiliser JConsole de voir ce qui se passe
Oui - L'analyse du tas a été activée. Je n'ai pas besoin -Server code> parce que je cours sur un monstre Solaris afin que la JVM soit un serveur un par défaut. Oui, j'utilise Scala 2.7.7.
J'accepte la réponse parce que je pense maintenant que quelque chose d'autre se passe; Je vais poser une question distincte
L'analyse d'évacuation a été désactivée: Stackoverflow.com/Questtions/2179830/...
Essayez jdk6u21. L'analyse d'évacuation a été rééditée
Je vous suggère d'essayer d'augmenter la taille de la nouvelle génération, par ex. -xx: Newsize = 96m xx: newratio = 3 code>. Utilisez Jvisalvm (inclus dans la JDK), avec le Plugin Visual GC pour voir comment le Les jeunes et anciens espaces sont utilisés. p>
Oui, j'ai essayé ceci et cela n'a fait pratiquement aucune différence. J'ai essayé des ratios allant de 1 à 4
du Notes de publication JDK-U18 : P >
Notez que l'optimisation de l'analyse d'échappement (-XX: + DoScapeanalyse) est désactivée en 6U18. Cette option sera restaurée dans une future mise à jour Java SE 6. P> blockQuote>
Oui, c'est activé par défaut dans Java 6U23 et plus tard (voir docs.oracle.com/javase/7/docs/technotes/guides/vm/... ).