2.8方法区内存溢出
1.8以前会导致永久代内存溢出
package xx;
import jdk.internal.org.objectweb.asm.ClassWriter;
import jdk.internal.org.objectweb.asm.Opcodes;
/**
* 演示永久代内存溢出
* -XX:MaxPermSize=10m
*/
public class Demo1 extends ClassLoader { // 可以用来加载类的二进制字节码
public static void main(String[] args) {
int j = 0;
try {
Demo1 test = new Demo1();
for (int i = 0; i < 10000; i++, j++) {
// ClassWriter作用是生成类的二进制字节码
ClassWriter cw = new ClassWriter(0);
// 版本号,public,类名,包名,父类,接口
cw.visit(Opcodes.V1_6, 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以后会导致元空间内存溢出
动态产生类的场景
Last updated