Java触发Metaspace的OOMError

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++) {
            //1.创建ClassWriter
            ClassWriter classWriter = new ClassWriter(0);
            
            //2.指定类的:Java版本号、类名、包名、父类、接口
            classWriter.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "Class_" + i, null, "java/lang/Object", null);
            
            //3.生成类的字节码
            byte[] byteArray = classWriter.toByteArray();
            
            //4.将类的字节码加载到虚拟机
            metaSpaceOOMTest.defineClass("Class_" + i, byteArray, 0, byteArray.length);

            System.err.printf("动态加载了 %d 个类\n", i);
            count++;
        }

        System.err.printf("动态加载了 %d 个类", count);
    }

}
posted @   JaxYoun  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2020-05-02 Linux中CPU性能分析工具perf简单使用(亲测可用)
2020-05-02 Linux之SeLinux
2020-05-02 Docker基础
2020-05-02 yum常用命令
2020-05-02 Centos7配置yum国内镜像及仓库升级
点击右上角即可分享
微信分享提示