Comment vérifier l'utilisation de la mémoire JVM : conseils pratiques et méthodes partagées
JVM (Java Virtual Machine) est l'environnement d'exécution des programmes Java. Elle est responsable de la conversion du bytecode Java en code machine et de la gestion de l'utilisation de la mémoire du programme. Comprendre l'utilisation de la mémoire JVM est très important pour optimiser les performances du programme et résoudre les problèmes de fuite de mémoire. Cet article vous présentera quelques conseils et méthodes pratiques pour afficher l'utilisation de la mémoire JVM et fournira des exemples de code spécifiques.
a.jmap : utilisé pour générer un instantané de la mémoire du tas Java. Vous pouvez visualiser la distribution des objets dans le tas via la commande suivante :
jmap -histo <pid>
où
b. jstat : utilisé pour surveiller l'état et les informations statistiques de la machine virtuelle Java. Vous pouvez afficher l'utilisation du tas via la commande suivante :
jstat -gc <pid>
où
c.jconsole : fournit une interface utilisateur graphique pour surveiller l'état d'exécution et les performances de la machine virtuelle Java, et peut afficher l'utilisation de la mémoire tas.
import javax.management.*; import java.lang.management.*; public class MemoryUsageDemo { public static void main(String[] args) throws Exception { // 获取MBean服务器 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); // 声明ObjectName,用于获取MemoryMXBean ObjectName name = new ObjectName(ManagementFactory.MEMORY_MXBEAN_NAME); // 获取MemoryMXBean MemoryMXBean mxBean = ManagementFactory.newPlatformMXBeanProxy(mbs, name, MemoryMXBean.class); // 获取堆内存使用情况 MemoryUsage heapMemoryUsage = mxBean.getHeapMemoryUsage(); System.out.println("Heap Memory Usage:"); System.out.println("Initial: " + heapMemoryUsage.getInit() / (1024 * 1024) + "MB"); System.out.println("Used: " + heapMemoryUsage.getUsed() / (1024 * 1024) + "MB"); System.out.println("Committed: " + heapMemoryUsage.getCommitted() / (1024 * 1024) + "MB"); System.out.println("Max: " + heapMemoryUsage.getMax() / (1024 * 1024) + "MB"); // 获取非堆内存使用情况 MemoryUsage nonHeapMemoryUsage = mxBean.getNonHeapMemoryUsage(); System.out.println("Non-Heap Memory Usage:"); System.out.println("Initial: " + nonHeapMemoryUsage.getInit() / (1024 * 1024) + "MB"); System.out.println("Used: " + nonHeapMemoryUsage.getUsed() / (1024 * 1024) + "MB"); System.out.println("Committed: " + nonHeapMemoryUsage.getCommitted() / (1024 * 1024) + "MB"); System.out.println("Max: " + nonHeapMemoryUsage.getMax() / (1024 * 1024) + "MB"); } }
java -Xloggc:<logFilePath> -XX:+PrintGCDetails <ClassName>
où <logfilepath></logfilepath>
为日志文件的路径,<classname></classname>
est le nom de la classe Java qui doit être exécutée. Après avoir exécuté le programme, un fichier avec le journal du garbage collector sera généré.
Résumé :
En utilisant les outils de ligne de commande, JMX et les journaux du garbage collector, nous pouvons facilement visualiser l'utilisation de la mémoire de la JVM. Ceci est très utile pour optimiser les performances du programme et résoudre les problèmes de fuite de mémoire. J'espère que grâce à l'introduction de cet article, vous pourrez maîtriser comment utiliser ces outils et techniques pour vérifier l'utilisation de la mémoire de la JVM et améliorer les performances des programmes Java.
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!