博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM —— 移除永久代
阅读量:6149 次
发布时间:2019-06-21

本文共 847 字,大约阅读时间需要 2 分钟。

近期准备生产环境 JDK 升级到 1.8,本地先升级了下,发现 -XX:PermSize 和 -XX:MaxPermSize 已经失效,取而代之的是一个新的区域 —— Metaspace(元数据区)。
在 JDK 1.7 及以往的 JDK 版本号中,Java 类信息、常量池、静态变量都存储在 Perm(永久代)里。类的元数据和静态变量在类载入的时候分配到 Perm,当类被卸载的时候垃圾收集器从 Perm 处理掉类的元数据和静态变量。当然常量池的东西也会在 Perm 垃圾收集的时候进行处理。

JDK 1.8 的对 JVM 架构的改造将类元数据放到本地内存中。另外。将常量池和静态变量放到 Java 堆里。

HotSopt VM 将会为类的元数据明白分配和释放本地内存。

在这样的架构下。类元信息就突破了原来 -XX:MaxPermSize 的限制。如今能够使用很多其它的本地内存。这样就从一定程度上攻克了原来在执行时生成大量类的造成常常 Full GC 问题,如执行时使用反射、代理等。

分配本地内存发给类元数据在一个称为「块」的数据结构上。不同类元数据将会用不同大小的块存放。

每一个块与一个类载入器相关联,而且全部被这个类载入器载入的类元数据在这个块下分配的空间存储元数据。

不同的应用块的大小将会不同,块大小的分配将会被内部碎片和外部碎片所限制。

当类载入器不再使用,全部和这个类载入器相关联的块空间将会被释放。

假设server内存足够,升级到 JDK 1.8 改动 JVM 參数最简单的办法就是将 -XX:PermSize 和 -XX:MaxPermSize 參数替换为 -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize,由于如今里面仅仅存元数据信息了,给它个大的空间肯定没问题。只是堆得空间由于如今要多存储原来在永久代的常量池和静态变量可能须要略微扩大些。

详细能够依据 GC 日志。和 $JAVA/bin 下的工具做一些权衡和调优

參考及引用:
                   
                   

转载地址:http://dmmya.baihongyu.com/

你可能感兴趣的文章
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>
有趣的数学书籍
查看>>
teamviewer 卸载干净
查看>>
多线程设计模式
查看>>
解读自定义UICollectionViewLayout--感动了我自己
查看>>
SqlServer作业指定目标服务器
查看>>
User implements HttpSessionBindingListener
查看>>
eclipse的maven、Scala环境搭建
查看>>
架构师之路(一)- 什么是软件架构
查看>>
jquery的冒泡和默认行为
查看>>
USACO 土地购买
查看>>
【原创】远景能源面试--一面
查看>>
B1010.一元多项式求导(25)
查看>>
10、程序员和编译器之间的关系
查看>>
前端学习之正则表达式
查看>>
配置 RAILS FOR JRUBY1.7.4
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>