服务器之家

服务器之家 > 正文

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

时间:2021-08-25 11:51     来源/作者:疯狂的太阳

介绍 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 的大小

  1. -XX:MaxMetaspaceSize=512m

代码演示

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

查看元空间大小

  1. java -XX:+PrintFlagsInitial

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

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

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

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

编写代码

  1. import org.springframework.cglib.proxy.Enhancer;
  2. import org.springframework.cglib.proxy.MethodInterceptor;
  3. import org.springframework.cglib.proxy.MethodProxy;
  4.  
  5. import java.lang.reflect.Method;
  6.  
  7. public class MetaspaceDemo {
  8. static class OOM{}
  9. public static void main(String[] args) {
  10. int i = 0;//模拟计数多少次以后发生异常
  11. try {
  12. while (true){
  13. i++;
  14. Enhancer enhancer = new Enhancer();
  15. enhancer.setSuperclass(OOM.class);
  16. enhancer.setUseCache(false);
  17. enhancer.setCallback(new MethodInterceptor() {
  18. @Override
  19. public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
  20. return methodProxy.invokeSuper(o,args);
  21. }
  22. });
  23. enhancer.create();
  24. }
  25. } catch (Throwable e) {
  26. System.out.println("=================多少次后发生异常:"+i);
  27. e.printStackTrace();
  28. }
  29. }
  30. }

运行结果:

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

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

原文链接:https://blog.csdn.net/baidu_37313657/article/details/105120506

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部