package com.jvm.memory;
import java.util.ArrayList;
import java.util.List;
public class HeapOOM {
/**
* VM 运行时参数 -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
* @param args
*/
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
while(true){
list.add(new OOMObject());
}
}
static class OOMObject{
}
}必须要的。从2个方面检查1:看看对参数是不是设置有问题,是否还可以调大。2:检查是不是某些对象的生命周期过长。
本地方法栈溢出(如果线程请求的栈深度大于虚拟机本身所允许的最大深度,将抛出StackOverflowError)
package com.jvm.memory;
public class JavaJVMStackOOM {
/**
* VM args -Xss128k
* @param args
*/
public static void main(String[] args) {
JavaJVMStackOOM oom = new JavaJVMStackOOM();
oom.stackLeak();
}
private int stackLenth=1;
public void stackLeak(){
stackLenth++;
stackLeak();
}
}
常量池溢出
package com.jvm.memory;
import java.util.ArrayList;
import java.util.List;
public class RuntimeConstantPoolOOM {
/**
* VM Args -XX:PermSize=10 -XX:MaxPermSize=10
* @param args
*/
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
int i=0;
while(true){
list.add(String.valueOf(i++).intern());
}
}
}原文:http://blog.csdn.net/u012516914/article/details/42273465