- -XX:PermSize/-XX:MaxPermSize,永久代内存;
1. 虚拟机参数:-ea,支持 assert 断言关键字
eclipse 默认是不开启此参数的,也就是虽然编译器支持 assert 关键字,但并不起作用,需要为虚拟机的默认参数中增加此配置选项:
- 【Window】⇒ 【Preferences】⇒ 【Java】⇒ 【Installed JREs】
- 右侧对点中待配置参数的JREs,对其进行编辑:
如下图所示:
2. Java 堆溢出
Java 堆用于存储对象实例(new),因此只要不断地创建对象,且保证 GC Roots 到对象之间有可达路径以避免垃圾回收机制清除这些对象,那么对象数量到达最大堆(-Xmx)的容量限制后,就会产生内存溢出异常:
- 限制 Java 堆的大小为 20M,且不可扩展:-Xms20m -Xmx20m
- 将最小值 -Xms 参数与最大值 -Xmx 参数设置为一样便可避免 Java 堆的自动拓展;
- -XX:+HeapDumpOnOutOfMemoryError,可让虚拟机在出现内存溢出异常时,Dump 出当前的内存堆转储快照以便进行定位分析:
/**
* VM args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
*/
public class HeapOOM {
static class OOMObject {
}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
int counter = 0;
while (true) {
list.add(new OOMObject());
System.out.println("counter = " + (++counter));
}
}
}