jdk8移除了PermGen,取而代之的是MetaSpace
来源:互联网 发布:迷你小钢炮淘宝地址 编辑:程序博客网 时间:2024/06/04 18:57
jdk8移除了PermGen,取而代之的是MetaSpace
元空间(Metaspace):
一种新的内存空间的诞生。JDK8 HotSpot JVM 使用本地内存来存储类元数据信息并称之为:元空间(Metaspace);这与Oracle JRockit 和IBM JVM’s很相似。这将是一个好消息:意味着不会再有Java.lang.OutOfMemoryError: PermGen问题,也不再需要你进行调优及监控内存空间的使用,但是新特性不能消除类和类加载器导致的内存泄漏。你需要使用不同的方法以及遵守新的命名约定来追踪这些问题。
PermGen 空间的状况
这部分内存空间将全部移除。
JVM的参数:PermSize 和 MaxPermSize 会被忽略并给出警告(如果在启用时设置了这两个参数)。
Metaspace 内存分配模型
(最大区别)大部分类元数据都在本地内存中分配。
用于描述类元数据的“klasses”已经被移除。
Metaspace 容量
默认情况下,类元数据只受可用的本地内存限制(容量取决于是32位或是64位操作系统的可用虚拟内存大小)。
新参数(MaxMetaspaceSize)用于限制本地内存分配给类元数据的大小。如果没有指定这个参数,元空间会在运行时根据需要动态调整。
Metaspace 垃圾回收
对于僵死的类及类加载器的垃圾回收将在元数据使用达到“MaxMetaspaceSize”参数的设定值时进行。
适时地监控和调整元空间对于减小垃圾回收频率和减少延时是很有必要的。持续的元空间垃圾回收说明,可能存在类、类加载器导致的内存泄漏或是大小设置不合适。
Java 堆内存的影响
一些杂项数据已经移到Java堆空间中。升级到JDK8之后,会发现Java堆 空间有所增长。
Metaspace 监控
元空间的使用情况可以从HotSpot1.8的详细GC日志输出中得到。
Jstat 和 JVisualVM两个工具,在我们使用b75版本进行测试时,已经更新了,但是还是能看到老的PermGen空间的出现。
参数设置
默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小:
-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize,最大空间,默认是没有限制的。
除了上面两个指定大小的选项以外,还有两个与 GC 相关的属性:
-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集
-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集
更新原因
1、字符串存在永久代中,容易出现性能问题和内存溢出。
2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
4、Oracle 可能会将HotSpot 与 JRockit 合二为一。
补充
jvm内存区域详解参考如下:
http://www.cnblogs.com/dolphin0520/p/3613043.html
get these!
- jdk8移除了PermGen,取而代之的是MetaSpace
- jdk8 Remove PermGen,Metaspace
- JDK8:PermGen变更为MetaSpace详解
- JVM在JDK8取消了永久代(PermGen)代之元空间(Metaspace)的意义
- JVM在JDK8取消了永久代(PermGen)代之元空间(Metaspace)的意义
- JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)
- jdk8 Metaspace 调优
- G1 && PermGen && Metaspace
- JDK8内存模型—消失的PermGen
- netstat已经被抛弃,取而代之的是ss
- 为什么我们不用CSS 取而代之的是 Xpath
- Java 8的变化: 从永久代(PermGen)到元空间(Metaspace)
- 永久代(PermGen)和元空间的区别(Metaspace)
- 永久代(PermGen)和元空间的区别(Metaspace)
- JDK8内存模型浅析—消失的PermGen
- JVM的Metaspace,JAVA8以前是Permanent Area
- @@IDENTITY 的缺点 SCOPE_IDENTITY() 取而代之
- Metaspace
- JS筛选table
- git add . 的时候遇到warning: LF will be replaced by CRLF in ...... 解决办法
- 一天一条Linux指令-hwclock
- 1613-3-傅溥衍 总结《2016年11月4日》【连续三十五天总结】
- atan和atan2的一点小区别
- jdk8移除了PermGen,取而代之的是MetaSpace
- whereis 命令与locate命令使用
- 安装Android studio要跳过的几个坑及解决办法
- 整合Hibernate和Spring
- 格力空调遥控器红外编码透析(长码)
- 软件架构入门
- WPF 多绑定和转化器
- 最高安全横档问题(100层台阶瓶子不摔碎的最高高度)
- netty java序列化