Metaspace 内存溢出分析
class Metaspace extends ClassLoader { public static List<Class<?>> createClasses() throws InterruptedException { // 类持有 List<Class<?>> classes = new ArrayList<Class<?>>(); // 循环1000w次生成1000w个差此外类。 for (int i = 0; i < 10000000; ++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); // 界说结构函数<init>要领 MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); // 第一个指令为加载this mw.visitVarInsn(Opcodes.ALOAD, 0); // 第二个指令为挪用父类Object的结构函数 mw.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()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 内存溢出分析
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32648.html