2.5堆内存诊断

jps工具

  • 查看当前系统中有哪些java进程

jmap工具

  • 查看堆内存占用情况

jconsole工具

  • 图形化界面,多功能的监测工具,可以连续监测

实验代码

public class Demo1 {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("1...");
        Thread.sleep(30000);
        byte[] array = new byte[1024 * 1024 * 10];
        System.out.println("2...");
        Thread.sleep(30000);
        array = null;
        System.gc();
        System.out.println("3...");
        Thread.sleep(100000L);
    }
}

jps 查看java进程

D:\Test\TestForJava\Learn>jps
15456 Launcher
16452 Jps
7588 Demo1
18760

jmap -heap {PID}

起始Eden Space使用量为used = 2520608 (2.403839111328125MB)

D:\Test\TestForJava\Learn>jmap -heap 7588
Attaching to process ID 7588, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.231-b11

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2654994432 (2532.0MB)
   NewSize                  = 55574528 (53.0MB)
   MaxNewSize               = 884998144 (844.0MB)
   OldSize                  = 112197632 (107.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 41943040 (40.0MB)
   used     = 2520608 (2.403839111328125MB)
   free     = 39422432 (37.596160888671875MB)
   6.0095977783203125% used
From Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
To Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
PS Old Generation
   capacity = 112197632 (107.0MB)
   used     = 0 (0.0MB)
   free     = 112197632 (107.0MB)
   0.0% used

1758 interned Strings occupying 157640 bytes.

创建一个10M的对象后,Eden Space使用量为used = 13006384 (12.403854370117188MB)

D:\Test\TestForJava\Learn>jmap -heap 7588
Attaching to process ID 7588, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.231-b11

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2654994432 (2532.0MB)
   NewSize                  = 55574528 (53.0MB)
   MaxNewSize               = 884998144 (844.0MB)
   OldSize                  = 112197632 (107.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 41943040 (40.0MB)
   used     = 13006384 (12.403854370117188MB)
   free     = 28936656 (27.596145629882812MB)
   31.00963592529297% used
From Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
To Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
PS Old Generation
   capacity = 112197632 (107.0MB)
   used     = 0 (0.0MB)
   free     = 112197632 (107.0MB)
   0.0% used

1759 interned Strings occupying 157688 bytes.

垃圾回收后,Eden Space使用量为used = 838880 (0.800018310546875MB)

D:\Test\TestForJava\Learn>jmap -heap 7588
Attaching to process ID 7588, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.231-b11

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 2654994432 (2532.0MB)
   NewSize                  = 55574528 (53.0MB)
   MaxNewSize               = 884998144 (844.0MB)
   OldSize                  = 112197632 (107.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)

Heap Usage:
PS Young Generation
Eden Space:
   capacity = 41943040 (40.0MB)
   used     = 838880 (0.800018310546875MB)
   free     = 41104160 (39.199981689453125MB)
   2.0000457763671875% used
From Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
To Space:
   capacity = 6815744 (6.5MB)
   used     = 0 (0.0MB)
   free     = 6815744 (6.5MB)
   0.0% used
PS Old Generation
   capacity = 112197632 (107.0MB)
   used     = 640800 (0.611114501953125MB)
   free     = 111556832 (106.38888549804688MB)
   0.5711350485543224% used

1745 interned Strings occupying 156696 bytes.

相比纯文本工具,图形化工具总更显得直观。下面我们介绍一款图形化工具-jconsole,jconsole可以实时的监控运行程序的以下指标

  • 堆内存使用量

  • 线程数

  • cpu占用率

Last updated

Was this helpful?