Cara menyemak penggunaan memori JVM: Petua dan kaedah praktikal dikongsi
JVM (Java Virtual Machine) ialah persekitaran berjalan program Java Ia bertanggungjawab untuk menukar kod bait Java kepada kod mesin dan menguruskan penggunaan memori program. Memahami penggunaan memori JVM adalah sangat penting untuk mengoptimumkan prestasi program dan menyelesaikan masalah kebocoran memori. Artikel ini akan memperkenalkan anda kepada beberapa petua dan kaedah praktikal untuk melihat penggunaan memori JVM, dan memberikan contoh kod khusus.
a. jmap: digunakan untuk menjana snapshot memori timbunan Java Anda boleh melihat pengedaran objek dalam timbunan melalui arahan berikut:
jmap -histo <pid>
di mana,
b. jstat: digunakan untuk memantau status dan maklumat statistik mesin maya Java Anda boleh melihat penggunaan timbunan melalui arahan berikut:
jstat -gc <pid>
di mana,
c. jconsole: Menyediakan antara muka pengguna grafik untuk memantau status berjalan dan prestasi mesin maya Java, dan boleh melihat penggunaan memori timbunan.
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>
di mana <logfilepath></logfilepath>
为日志文件的路径,<classname></classname>
ialah nama kelas Java yang perlu dijalankan. Selepas menjalankan program, fail dengan log pemungut sampah akan dihasilkan.
Ringkasan:
Dengan menggunakan alatan baris arahan, JMX dan log pengumpul sampah, kami boleh melihat penggunaan memori JVM dengan mudah. Ini sangat membantu untuk mengoptimumkan prestasi program dan menyelesaikan masalah kebocoran memori. Saya berharap melalui pengenalan artikel ini, anda boleh menguasai cara menggunakan alatan dan teknik ini untuk menyemak penggunaan memori JVM dan meningkatkan prestasi program Java.
Atas ialah kandungan terperinci Cara menyemak penggunaan memori JVM: petua praktikal dan kaedah dikongsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!