Metaspace 内存溢出分析
标签:分析 class 第一个 writer load 一个 nec ssl fine
class Metaspace extends ClassLoader {
public static List> createClasses() throws InterruptedException {
// 类持有
List> classes = new ArrayList>();
// 循环1000w次生成1000w个不同的类。
for (int i = 0; i i) {
Thread.sleep(1);
ClassWriter cw = new ClassWriter(0);
// 定义一个类名称为Class{i},它的访问域为public,父类为java.lang.Object,不实现任何接口
cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "Class" + i, null,
"java/lang/Object", null);
// 定义构造函数方法
MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "",
"()V", null, null);
// 第一个指令为加载this
mw.visitVarInsn(Opcodes.ALOAD, 0);
// 第二个指令为调用父类Object的构造函数
mw.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object",
"", "()V");
// 第三条指令为return
mw.visitInsn(Opcodes.RETURN);
mw.visitMaxs(1, 1);
mw.visitEnd();
Metaspace test = new Metaspace();
byte[] code = cw.toByteArray();
// 定义类
Class> exampleClass = test.defineClass("Class" + i, code, 0, code.length);
classes.add(exampleClass);
}
return classes;
}
}
Metaspace 内存溢出分析
标签:分析 class 第一个 writer load 一个 nec ssl fine
原文地址:https://www.cnblogs.com/Tony100/p/12121073.html
评论