方法区
组成
方法区内存溢出
/**
* 演示元空间内存溢出
* -XX:MaXMetaspaceSize=8m
**/
public class Demo1_8 extends ClassLoader{ //可以用来加载类的二进制字节码
public static void main(String[] args){
int j = 0;
try{
Demo1_8 test = new Demo1_8();
for(int i = 0; ii < 10000; i++){
//ClassWriter作用是生成类的二进制字节码
ClassWriter cw = new ClassWriter(0);
//版本号,public,类名,包名,父类,接口
cw.visit(Opcodes.V1_8,Opcodes.ACC_PUBLIC,"Class" + i,null,"java/lang/object",null);
//返回byte[]
byte[] code = cw.toByteArray();
//执行了类的加载
test.defineClass("Class"+i,code,0,code.length);
}
}finally{
System.out.println(j);
}
}
}
- 1.8以前会导致永久代内存溢出
演示永久代内存溢出:java.lang.OutOfMemoryError: PermGen space
-XX:MaXPermSize=8m
- 1.8之后会导致永久代内存溢出
演示永久代内存溢出:java.lang.OutOfMemoryError: Metaspace
-XX:MaXMetaspaceSize=8m
场景
- spring
- mybatis