Metaspace 内存溢出分析

2021-05-03 14:28

阅读:700

标签:分析   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


评论


亲,登录后才可以留言!