Java中什么样的类才是可以被回收的呢?

这个条件是相当的苛刻,包括不限于以下一些:比如这个类的类加载器先要被回收,比如这个类的所有对象实例都要被回收,等等。

所以一旦你的Metaspace区域满了,未必能回收掉里面很多的类

那么一旦回收不了多少类,此时你的JVM还在拼命的加载类放到Metaspace里去,你觉得此时会发生什么事情?

显而易见,一旦你尝试回收了Metaspace中的类之后发现还是没能腾出来太多空间,此时还要继续往Metaspace中塞入更多的类,直接就会引发内存溢出的问题。因为此时Metaspace区域的内存空间不够了。

一旦发生了内存溢出就说明JVM已经没办法继续运行下去了,此时可能你的系统就直接崩溃了,这就是Metaspace区域发生内存溢出的一个根本的原理。

到底什么情况下会发生Metaspace内存溢出?

平心而论,Metaspace这块区域一般很少发生内存溢出,如果发生内存溢出一般都是因为两个原因:

第一种原因,很多工程师他不懂JVM的运行原理,在上线系统的时候对Metaspace区域直接用默认的参数,即根本不设置其大小

这会导致默认的Metaspace区域可能才几十MB而已,此时对于一个稍微大型一点的系统,因为他自己有很多类,还依赖了很多外部的jar包有有很多的类,几十MB的Metaspace很容易就不够了

第二种原因,就是很多人写系统的时候会用cglib之类的技术动态生成一些类,一旦代码中没有控制好,导致你生成的类过于多的时候,就很容易把Metaspace给塞满,进而引发内存溢出

对于第一种问题,通常来说,有经验的工程师上线系统往往会设置对应的Metaspace大小,推荐的值在512MB那样,一般都是足够的。

Java Metaspace相关推荐

  1. jvm系列(十一):Java 8-从持久代到metaspace

    原文出处:http://blog.csdn.net/wang8118/article/details/45765869 Java 8介绍了一些新语言以及运行时新特点.其中一个特点便是完全移除了持久代( ...

  2. java permgen_Java 8:从PermGen到元空间

    java permgen 您可能已经知道,现在可以下载JDK 8 Early Access . 这使Java开发人员可以尝试Java 8的某些新语言和运行时功能.这些功能之一是完全删除自Oracle自 ...

  3. Java 8:从PermGen到元空间

    您可能已经知道,现在可以下载JDK 8 Early Access . 这使Java开发人员可以尝试Java 8的一些新语言和运行时功能.这些功能之一是完全删除自Oracle自JDK 7发行以来就宣布的 ...

  4. java虚拟机-JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)

    一.背景 1.1 永久代(PermGen)在哪里? 根据,hotspot jvm结构如下(虚拟机栈和本地方法栈合一起了): 上图引自网络,但有个问题:方法区和heap堆都是线程共享的内存区域. 关于方 ...

  5. java元空间扩容_JVM元空间(Metaspace)

    从方法区(PermGen)到元空间(Metaspace) 方法区(PermGen) JDK1.8以前的HotSpot JVM有方法区,也叫永久代(permanent generation). 方法区用 ...

  6. java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)

    本文转载 一.JVM 内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是 ...

  7. java去掉图片上的meta信息_正确的java 8设置用于类卸载(Metaspace清理)/ cxf问题

    我正在我的应用程序中创建动态CXF客户端. 这是客户端创建的代码片段: JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.ne ...

  8. Java中的元空间(Metaspace)

    元空间(Metaspace)是Java虚拟机用于存储类和元数据的内存区域.在Java 8及之前的版本中,元空间的实现方式是使用持久代(Permanent Generation,PermGen),而在J ...

  9. Java 8: 元空间(Metaspace)

    前言 很多开发者都在其系统中见过"java.lang.OutOfMemoryError: PermGen space"这一问题.这往往是由类加载器相关的内存泄漏以及新类加载器的创建 ...

最新文章

  1. python使用imbalanced-learn的NearMiss方法进行下采样处理数据不平衡问题
  2. SHELL脚本自动化部署MFS分布式文件系统
  3. Populating Next Right Pointers in Each Node II
  4. Surf算法学习心得(一)——算法原理
  5. 深度学习核心技术精讲100篇(五十六)- 自动驾驶感知技术的实践与探索
  6. php 获取汉字,php 获取汉字长度
  7. 程序员修神之路--分布式系统使用网关到底是好还是坏?
  8. android listview asynctask,Android精通之AsyncTask与ListView讲解
  9. 前沿 | 加州理工大学什么是Imitation Learning(模仿学习)
  10. postgresql生产环境数据库迁移
  11. mysql-------常用函数
  12. 类数据源Visual C++对ODBC数据库资源的访问
  13. php upload 上传类,发布一个PHP的文件上传类——Uploader
  14. 牛客网项目1.7项目调试技巧
  15. 如何自定义Steam搜索设置
  16. word2019对输入时响应较慢
  17. 怎样用c语言实现CPU超频,cpu超频教程【操作流程】
  18. python统计列分布_pd.DataFrame统计各列数值多少的实例
  19. 学员故事|老男孩网络安全学习感悟,结果让我意外!
  20. js中try和catch的用法

热门文章

  1. flex换行并且中间间距相同
  2. 如果女方重婚罪法律怎么规定赔偿
  3. 社畜跑路、校招上岸、润
  4. 利用计算机辅助语文教学,由《看云识天气》探网络与计算机辅助语文教学
  5. css修改滚动条的样式
  6. 2014年电大计算机应用基础考,2017年电大网考计算机应用基础统考试题
  7. 电大英语计算机统考成绩查询2015,2015年12月份电大网考统考英语考试试题汇总 统考...
  8. 日积月累Day5《为什么家庭会生病》
  9. 汽车电子嵌入式编程-【无人驾驶】QNX操作系统(补充篇)
  10. FFMPEG编译及遇到的问题