J'ai une application très sensible à la performance en Java. (Je sais que je devrais réellement utiliser c ou autre chose. Mais c'est Java maintenant.) J'essaie d'éviter de créer et de jeter des objets. Maintenant, j'ai besoin de savoir combien de collecte de déchets se passe encore. P>
Si possible, j'aimerais avoir une sorte de nombre en millisecondes ou nanosecondes quelque chose qui ne nécessite pas d'installation de plus de logiciels. P>
4 Réponses :
Vous pouvez utiliser Visualvm pour cela, c'est exactement ce dont vous avez besoin.
Comme vous pouvez le voir ci-dessous, vous avez une activité de GC très utile: P>
p>
Outre l'activité de GC, vous avez beaucoup de détails, il s'agit de: Utilisation du tas, utilisation de la CPU, utilisation des objets d'objet, etc. p>
Vous pouvez utiliser des outils tels que VisualvM pour surveiller l'activité de l'application. Assurez-vous d'utiliser des alogorithmes de GC appropriés. P>
Oracle JVM fournit plusieurs types de capteurs de déchets: P>
En savoir plus sur ces collectionneurs ici . P>
+1 Remarque: Pour les programmes de GC faible, VisualvM créera plus de déchets que votre application. Pour cela, j'utilise Yourkit, ce qui n'est pas gratuit. Je commencerais avec Visualvm.
Il existe également un plugin pour Visualvm appelé VisualGC qui montre ce qui se passe pour chaque espace de tas en temps réel. blogs.oracle.com/klc/entry/visualgc_plugin_for_visualvm
JProfiler , qui permet à la fois de profil de mémoire d'évaluer l'utilisation de la mémoire et Fuite d'allocation dynamique et profilage de la CPU pour évaluer les conflits de fil. p>
ou vous pouvez laisser imprimer JVM l'activité GC .. Ces paramètres que j'ai:
-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Xloggc:logs/gc.log
Juste une tête de tête que c n'est pas une pratique de mains mieux que Java - cela dépend de la façon dont vous les comparez. C'est une bonne comparaison que j'ai trouvée a >, l'essentiel est que C est meilleur que Java pour l'empreinte mémoire et pour des programmes numériquement intensifs, tandis que Java a un meilleur support multi-threading. Un document de recherche que j'ai lu il y a plusieurs années a constaté que (si vous laissez le tas de Java de croître à 4 fois la taille du tas C), il n'y avait pas de différence de performance entre les deux langues pour de nombreux programmes Sourceforge.
Dupliqué possible de Réglage des collections à ordures pour une faible latence