JDK8从永生代到元数据区
永生代
永生代默认的最大内存大小是在32位JVM上为64MB, 在64位JVM上为82MB。可以通过-XX:PermSize=[size]和-XX:MaxPermSize=[size]来调整。
永生代包含类和方法的元数据信息, 一般情况下它需要的空间不是很大, 但是由于热部署等一些特性会导致类信息越来越多, 从而发生内存溢出(OutOfMemoryError)。
永生代的大小是在启动时指定的(通过-XX:MaxPermSize=xxm), 并且不能在运行时重新动态调整。
元数据区
虽然元数据区替代了永生代, 但是它还是可能发生内存溢出的, 默认情况下元数据区的大小上限即为剩余物理内存的大小, 但是也可以指定最大元数据区大小。指定元数据区大小的参数为: -XX:MaxMetaspaceSize.
元数据区会在达到指定大小时发生垃圾回收, 设置的参数是:-XX:MetaspaceSize。
在元数据区也没有了klasses, 这是用来存储初始加载的类的描述信息, 意味着元数据区只存储原始类的信息。
另外还有两个参数:
-XX:MinMetaspaceFreeRatio: 当内存剩余比例小于这个值时垃圾回收会频繁一些, 默认40%。
-XX:MaxMetaspaceFreeRatio: 当内存剩余比例大于这个值时垃圾回收频率会低一点,默认70%。
常量池
常量池的实现为一个固定大小的hash字典, 每个桶里包含一个具有相同hash值的字符串数组。
jdk7之前常量池是在永生代中, 从jdk7开始常量池从永生代移除, 放到了堆中。
jdk6中常量池默认大小为1009,jdk6早期这个不可配置, jdk6u30到jdk6u41可配置。而在jdk7中从jdk7u02开始可以配置。从jdk7u40开始, 常量池的默认大小为60013。
参数:
-XX:PrintStringTableStatistics: JVM进程退出时会打印StringTable统计信息
-XX:StringTableSize=N指定常量池大小
Refer:
https://www.baeldung.com/java-permgen-metaspace
http://java-performance.info/string-intern-in-java-6-7-8/
JDK8从永生代到元数据区的更多相关文章
- JVM中的新生代、老年代和永生代
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...
- jvm 中的 ”永生代“
“方法区” 主要存储的信息包括:常量信息,类信息,方法信息,而且是全局共享的(多线程共享): jvm 有多种实现方式(不同的厂商): 并不是所有的jvm 都有永生代的概念: 通常情况下, 很多人把 “ ...
- HotSpot Java虚拟机中的“方法区”“持久代”“元数据区”的关系?
Sun/Oracle JDK的HotSpot VM中,直到JDK7都有“持久代”(Permanent Generation,简称PermGen).也称为方法区.Oracle JDK8的HotSpot ...
- jdk8永久代从方法区移除的验证
/*** 测试使用jdk8中是否仍然可以使用永久代* jvm options * -Xms20m -Xmx20m -Xmn10m -XX:PermSize=10m -XX:MaxPermSize=10 ...
- 常量池、perm(持久代)、方法区、栈
常量池.perm(持久代).方法区.栈 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据. 除了包含代码中所定义的各种基本类型(如:int.long等等)和对象型(如St ...
- JDK8的JVM内存结构,元空间替代永久代成为方法区及常量池的变化
JVM的知识这里总结的很详细:https://github.com/doocs/jvm/blob/master/README.md,因此在本博客也不会再对其中的东西重复总结了. 现在很多文章关于JVM ...
- Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法
在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...
- Java内存管理:Java内存区域 JVM运行时数据区
转自:https://blog.csdn.net/tjiyu/article/details/53915869 下面我们详细了解Java内存区域:先说明JVM规范定义的JVM运行时分配的数据区有哪些, ...
- jvm——metaspace代替永久代
https://mp.weixin.qq.com/s?__biz=MzIzNjI1ODc2OA==&mid=2650886860&idx=1&sn=f8bc6ab03d7a07 ...
随机推荐
- 015_matlab运行C语言
视频教程:https://v.qq.com/x/page/q3039wsuged.html 资料下载:https://download.csdn.net/download/xiaoguoge11/12 ...
- three.js 加载3DS 404 文件找不到
web.config修改如下: code: <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配 ...
- bzoj3745: [Coci2015]Norma 分治,单调队列
链接 bzoj 思路 首先\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}\sum\limits_{k=i}^{j}max(a_k)\)可以用单调队列求解.参见 ...
- centos7安装pure-ftpd
1.获取安装包 .tar.gz && cd pure-ftpd-1.0.47 ./configure --prefix=/usr/local/pureftpd --without-in ...
- Fluent Meshing分离边界层网格
源视频链接: https://pan.baidu.com/s/1SYB7UdRuXOGYXYwmxKADdw 提取码: h7qj
- mysql(五)执行计划
参考文档 http://blog.itpub.net/12679300/viewspace-1394985/
- Eclipse解决项目中找不到Maven Dependencies
项目中找不到Maven Dependencies 正常的Maven项目应该是这样的 自己的项目中却没有Maven Dependencies 先做第一步 若项目中还没有出现Maven Dependenc ...
- 安装tensorflow-gpu2.0(windows)
anaconda安装见前一篇https://www.cnblogs.com/wintersoft/p/11609188.html https://mirrors.tuna.tsinghua.edu.c ...
- CAS单点登录源码解析之【客户端】
cas 3.5.3服务器搭建+spring boot集成+shiro模拟登录(不修改现有shiro认证架构).因为我们属于供应商,所以有些客户那里会需要接对方的CAS,所以没有使用shiro和cas的 ...
- Torch-Models 别人训练的FastNeuralStyle
This is the pink style's image: This is the triangle one: The fire ones come from this image: And th ...