- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java永久代去哪儿了
随着Java8的到来,我们再也见不到永久代了。但是这并不意味着类的元数据信息也消逝了。这些数据被移到了一个与堆不相连的本地内存区域,这个区域就是我们要提到的元空间。
这项改动是很有必要的,由于对永久代进行调优是很困难的。永久代中的元数据可能会随着每一次Full GC发生而进行移动。并且为永久代设置空间大小也是很难确定的,由于这其中有很多影响因素,比如类的总数,常量池的大小和方法数量等。
同时,HotSpot虚拟机的每品种型的垃圾回收器都需要特殊处理永久代中的元数据。将元数据从永久代剥离出来,不只实现了对元空间的无缝管理,还可以简化Full GC以及对以后的并发隔离类元数据等方面进行优化。
移除永久代的影响
由于类的元数据安排在本地内存中,元空间的最大可安排空间就是系统可用内存空间。因而,我们就不会遇到永久代存在时的内存溢出错误,也不会消灭泄漏的数据移到交换区这样的事情。最终用户可以为元空间设置一个可用空间最大值,假如不进行设置,JVM会自动依据类的元数据大小动态添加元空间的容量。
留意:永久代的移除并不代表自定义的类加载器泄露问题就处理了。因而,你还必需监控你的内存消耗情况,由于一旦发生泄漏,会占用你的大量本地内存,并且还可能导致交换区交换愈加蹩脚。
元空间内存管理
元空间的内存管理由元空间虚拟机来完成。从前,对于类的元数据我们需要不同的垃圾回收器进行处理,现在只需要执行元空间虚拟机的C++代码即可完成。在元空间中,类和其元数据的生命周期和其对应的类加载器是相同的。话句话说,只需类加载器存活,其加载的类的元数据也是存活的,因而不会被回收掉。
我们从行文到现在提到的元空间略微有点不严谨。精确?????的来说,每一个类加载器的存储区域都称作一个元空间,全部的元空间合在一起就是我们一直说的元空间。当一个类加载器被垃圾回收器标记为不再存活,其对应的元空间会被回收。在元空间的回收过程中没有重定位和压缩等操作。但是元空间内的元数据会进行扫描来确定Java引用。
元空间虚拟机担任元空间的安排,其接受的方式为组块安排。组块的大小因类加载器的类型而异。在元空间虚拟机中存在一个全局的空闲组块列表。当一个类加载器需要组块时,它就会从这个全局的组块列表中猎取并维持一个本人的组块列表。当一个类加载器不再存活,那么其持有的组块将会被释放,并前往给全局组块列表。类加载器持有的组块又会被分成多个块,每一个块存储一个单元的元信息。组块中的块是线性安排(指针碰撞安排方式)。组块安排自内存映射区域。这些全局的虚拟内存映射区域以链表方式连接,一旦某个虚拟内存映射区域清空,这部分内存就会前往给操作系统。
上图呈现的是虚拟内存映射区域如何进行元组块的安排。类加载器1和3表明使用了反射或者为匿名类加载器,他们使用了特定大小组块。 而类加载器2和4依据其内部条目的数量使用小型或者中型的组块。
元空间调优与工具
正如上面提到的,元空间虚拟机把握元空间的增长。但是有些时候我们想限制其增长,比如通过显式在命令行中设置-XX:MaxMetaspaceSize。默认情况下,-XX:MaxMetaspaceSize的值没有限制,因而元空间甚至可以延长到交换区,但是这时候当我们进行本地内存安排时将会失败。
对于一个64位的服务器端JVM来说,其默认的–XX:MetaspaceSize值为21MB。这就是初始的高水位线。一旦触及到这个水位线,Full GC将会被触发并卸载没有用的类(即这些类对应的类加载器不再存活),然后这个高水位线将会重置。新的高水位线的值取决于GC后释放了多少元空间。假如释放的空间不足,这个高水位线则上升。假如释放空间过多,则高水位线下降。假如初始化的高水位线设置过低,上述高水位线调整情况会发生很多次。通过垃圾回收器的日志我们可以观看到Full GC多次调用。为了避开频繁的GC,建议将–XX:MetaspaceSize设置为一个相对较高的值。
经过多次GC之后,元空间虚拟机自动调整高水位线,以此来推迟下一次垃圾回收到来。
有这样两个选项 XX:MinMetaspaceFreeRatio和XX:MaxMetaspaceFreeRatio,他们类似于GC的FreeRatio选项,用来设置元空间空闲比例的最大值和最小值。我们可以通过命令行对这两个选项设置对应的值。
下面是一些改进的工具,用来猎取更多关于元空间的信息。
jmap -clstats PID 打印类加载器数据。(-clstats是-permstat的替代方案,在JDK8之前,-permstat用来打印类加载器的数据)。下面的例子输出就是DaCapo’s Avrora benchmark程序的类加载器数据
$ jmap -clstats
Attaching to process ID 6
您可能关注的文档
最近下载
- 吉林省中药软片炮制规范.pptx VIP
- 名著阅读《湘行散记》七年级语文上册部编版(共9页).docx VIP
- 《白洋淀纪事》阅读测试题含答案(推荐).docx VIP
- 必考名著《白洋淀纪事》导读+知识点汇总.pdf VIP
- CQJZDE-2008 重庆市建筑工程计价定额.docx VIP
- 人教部编版七年级语文上册名著选读《湘行散记》导读.doc VIP
- 重庆市建筑工程计价定额CQJZDE-2008.doc
- 部编版七上语文名著导读《朝花夕拾》、《白洋淀纪事》、《湘行散记》知识点练习(含答案).docx VIP
- 超星尔雅学习通《大学生劳动教育》章节测试含答案.docx VIP
- 七年级上册名著《湘行散记》知识点+习题(共12页).docx VIP
文档评论(0)