Java触发Metaspace的OOMError

发布时间 2023-05-03 00:02:06作者: JaxYoun
package comg.yang.httpstest;

import jdk.internal.org.objectweb.asm.ClassWriter;
import jdk.internal.org.objectweb.asm.Opcodes;

/**
 * @description:
 * @author: Yang JianXiong
 * @since: 2023/5/1
 * <p>
 * VMOption:-XX:MetaspaceSize=10M -XX:MaxMetaspaceSize=10M
 */
public class MetaSpaceOOMTest extends ClassLoader {

    public static void main(String[] args) {
        int count = 0;
        MetaSpaceOOMTest metaSpaceOOMTest = new MetaSpaceOOMTest();
        for (int i = 0; i < 10000; i++) {
            ClassWriter classWriter = new ClassWriter(0);
            classWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Class_" + i, null, "java/lang/Object", null);
            byte[] byteArray = classWriter.toByteArray();
            metaSpaceOOMTest.defineClass("Class_" + i, byteArray, 0, byteArray.length);
            System.our.printf("动态加载了 %d 个类\n", i);
            count++;
        }
        System.err.printf("动态加载了 %d 个类", count);
    }

}