堆
定义
通过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工具
- 圆形界面的,多功能的监测工具,可以连续监测
案例
- 垃圾回收之后,内存占用仍然很高