JVM-05堆

35 阅读1分钟

image.png

定义

通过new关键字,创建对象都会使用堆内存。

特点

  • 它是线程共享的,堆中对象都需要考虑线程安全问题
  • 有垃圾回收机制

堆内存溢出

/**
  * 演示堆内存溢出 java.lang.OutOfMemoryError:java heap space
  * -Xmx8m
  *
**/

public class Demo1_5{
    public static void main(String[] args){
        int i = 0;
        try{
            List<String> list = new ArrayList();
            String a = "hello";
            while(true){
                list.add(a);
                a = a + a;
                i++;
            }
        }catch(Throwable e){
            e.printStackTrace();
            System.out.println(i);
        }
    }
}

堆内存诊断

1、jps工具

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

2、jmap工具 (jmap -heap 进程id)

  • 查看堆内存占用情况

3、jconsole工具

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

案例

  • 垃圾回收之后,内存占用仍然很高