java.lang.OutOfMemoryError: Metaspace异常解决的方法

 更新时间:2021年03月18日 14:47:36   作者:疯狂的太阳  
这篇文章主要介绍了java.lang.OutOfMemoryError: Metaspace异常解决的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

介绍 Metaspace

java8 及以后的版本使用Metaspace来代替永久代,Metaspace是方法区在HotSpot中的实现,它与持久代最大区别在于,Metaspace并不在虚拟机内存中而是使用本地内存也就是在JDK8中,classe metadata(the virtual machines internal presentation of Java class),被存储在叫做Metaspace的native memory.
永久代(java 8 后被元空间Metaspace取代了)存放了以下信息:

  • 虚拟机加载的类信息
  • 常量池
  • 静态变量
  • 即时编译后的代码

出现问题原因

错误的主要原因, 是加载到内存中的 class 数量太多或者体积太大。

解决办法

增加 Metaspace 的大小

-XX:MaxMetaspaceSize=512m

代码演示

模拟Metaspace空间溢出,我们不断生成类往元空间灌,类占据的空间是会超过Metaspace指定的空间大小的

查看元空间大小

java -XX:+PrintFlagsInitial

在这里插入图片描述

设置配置 这里设置10m方便演示效果

-XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m

在这里插入图片描述

编写代码

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class MetaspaceDemo {
  static class OOM{}
  public static void main(String[] args) {
    int i = 0;//模拟计数多少次以后发生异常
    try {
      while (true){
        i++;
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(OOM.class);
        enhancer.setUseCache(false);
        enhancer.setCallback(new MethodInterceptor() {
          @Override
          public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
            return methodProxy.invokeSuper(o,args);
          }
        });
        enhancer.create();
      }
    } catch (Throwable e) {
      System.out.println("=================多少次后发生异常:"+i);
      e.printStackTrace();
    }
  }
}

运行结果:

在这里插入图片描述

到此这篇关于java.lang.OutOfMemoryError: Metaspace异常解决的方法的文章就介绍到这了,更多相关java.lang.OutOfMemoryError: Metaspace异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springmvc接收参数为日期类型详解

    springmvc接收参数为日期类型详解

    这篇文章主要介绍了springmvc接收参数为日期类型,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • SpringBoot内置tomcat启动原理详解

    SpringBoot内置tomcat启动原理详解

    这篇文章主要介绍了SpringBoot内置tomcat启动原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Java字母大小写转换的方法

    Java字母大小写转换的方法

    这篇文章主要为大家详细介绍了Java字母大小写转换的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Spring MVC异常处理机制示例详解

    Spring MVC异常处理机制示例详解

    这篇文章主要给大家介绍了关于Spring MVC异常处理机制的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • javaweb图书商城设计之订单模块(5)

    javaweb图书商城设计之订单模块(5)

    这篇文章主要为大家详细介绍了javaweb图书商城设计之订单模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • SpringBoot中的多个事务管理详解

    SpringBoot中的多个事务管理详解

    这篇文章主要介绍了SpringBoot中的多个事务管理详解,事务管理是一种组织和协调各种活动和资源的方法,以实现特定目标,它涉及规划、执行和监控各种任务,以确保项目或组织的顺利运行,需要的朋友可以参考下
    2023-10-10
  • SpringBoot自动装配Condition的实现

    SpringBoot自动装配Condition的实现

    Spring4.0新增@Conditional注解,用于条件化Bean的注册,通过实现Condition接口并重写matches方法,可以控制Bean的创建与否,感兴趣的可以了解一下
    2024-10-10
  • Java插入JSON对象到PostgreSQL的步骤详解

    Java插入JSON对象到PostgreSQL的步骤详解

    在现代软件开发中,由于 JSON 数据的轻量和通用性,处理 JSON 数据已经变得无处不在,PostgreSQL 凭借其对 JSON 的强大支持,为存储和查询 JSON 数据提供了出色的平台,本文给大家介绍了Java插入JSON对象到PostgreSQL的步骤,需要的朋友可以参考下
    2024-11-11
  • Java如何通过反射机制获取数据类对象的属性及方法

    Java如何通过反射机制获取数据类对象的属性及方法

    文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • Spring AI聊天功能开发步骤

    Spring AI聊天功能开发步骤

    本文给大家介绍Spring AI聊天功能开发步骤,首先引入依赖,继承父版本的springboot依赖,最好是比较新的依赖,结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04

最新评论