jdk8移除了PermGen,取而代之的是MetaSpace
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相关推荐
- 【java】Java 8 - 移除Permgen 使用元空间
1.概述 转载:Java 8 - 移除Permgen 很多开发者都在其系统中见过"java.lang.OutOfMemoryError: PermGen space"这一问题.这往 ...
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...
- 永久代内存java_Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...
- java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)
本文转载 一.JVM 内存结构 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是 ...
- Java8:永久代(PermGen)和元空间(Metaspace)
一.PermGen(永久代) 绝大部分 Java 程序员应该都见过 "java.lang.OutOfMemoryError: PermGen space "这个异常.这里的 &qu ...
- java堆 permgen_Java8内存模型—永久代(PermGen)和元空间(Metaspace)
一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 1.虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建.栈里面存着的是一种叫&q ...
- jvm系列二:Java8内存模型-永久代(PermGen)和元空间(Metaspace)
原文地址:https://www.cnblogs.com/paddix/p/5309550.html 一.JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地 ...
- jdk8 元空间(Metaspace) GC
jdk8移除了PermGen,取而代之的是MetaSpace 元空间(Metaspace): 一种新的内存空间的诞生.JDK8 HotSpot JVM 使用本地内存来存储类元数据信息并称之为:元空间( ...
- 浅谈JDK8相对于JDK7的一些新特性
上两天阿海升级了一下JDK环境,IDE版本更新成了Eclipse Neon. 不得不说,这个版本的Eclipse确实很不错,用起来页比较舒服多了.尤其是这个Eclipse的暗黑主题"Drac ...
最新文章
- va_list、va_start和va_end使用
- 脱胎于BTC的BCH,适合你的道路在哪里?
- java中事务的介绍
- 将DVD刻录盘变成移动硬盘
- linux系统 硬链接和软链接
- 《JS权威指南学习总结--9.5 类和类型》
- GetProcAddress()用法
- Java使用表格显示日历编程_用java图形用户界面实现: 编写一个日历程序,能实现显示日历等简单功能。...
- 51单片机c语言计数程序,51单片机INTOINT1中断计数c语言源程序.doc
- python pandas读取csv_pandas读取csv文件数据的方法及注意点
- vscode 背景图片的设置
- 什么是CSR ? 什么是公钥和私钥?
- 104 自定义大头针
- 20行代码制作字符画版小黄鸭表情包 | 文末送书抽奖结果
- [VOT14](2022CVPR)CSWinTT: Transformer Tracking with Cyclic Shifting Window Attention
- ios面试题 看了就知道哪方面需要加强上机练习
- 36氪2022年Q3总收入同比增长两位数超预期,连续第四个季度盈利,广告收入同比增长20%
- 第一次实验结论与总结
- matlab语法介绍——fft()、ifft()、fftshift()
- Neptune海王星系统资源加载问题
热门文章
- C++ map和set
- git 命令 导出有变动的文件
- python猫狗大战游戏_Kaggle猫狗大战图片分类项目研究
- 三维CAD软件项目即将验收 3D打印获突破
- 中兴财务新云陈虎:财务应从最小数据集转为大数据 洞察五新商机
- 看电影学英语--欧美经典电影
- 惠普服务器cpu芯片,惠普、戴尔推出ARM服务器_Intel服务器CPU_服务器产业-中关村在线...
- Linux内核分析 笔记六 进程的描述和进程的创建 ——by王玥
- maven中profile的使用详解
- html中为什么h1比h3小,认识HTML中h1 h2 h3 h4标签