JVM8自适应导致内存居高不下
YOUNG GC
jvm年轻代分为eden区和survivor区,对象被创建后首先在eden区,如果一次young gc没有将其回收的话,会到survivor区。从survivor区到old generation需要了解下动态年龄判断
动态年龄判断:
1.对象超过15次没有被回收,可以通过MaxTenuringThreshold设置
2.相同年龄的对象超过survivor区的50%,可以通过TargetSurvivorRatio设置
对象超过15次没有被回收不太可能,那就是survivor区太小了?我们通过命令 jmap -heap 进程号来查看堆信息
启动程序时,只设置了初始堆内存和最大堆内存大小,其他都是默认参数。默认情况下,新生代和老年代的默认比例是1:2 ,eden区和两个survivor区的默认比例是8:1:1
而上图中我看可以看到年轻代与老年代的比例约等于 1:3 。eden区和两个survivor区的比例为199:1:1,都100多倍了
AdaptiveSizePolicy
经过查询发现JDK1.8的默认垃圾回收器是UseParallelGC ,默认启动了AdaptiveSizePolicy。这个参数会让垃圾回收器根据每次垃圾回收的GC时间和吞吐量来动态调整eden区和survivor区的比例。
AdaptiveSizePolicy有三个目标:
- Pause goal : 应用达到预期的GC暂停时间。
- Throughput goal : 应用达到预期的吞吐量,即应用正常运行时间/(正常运行时间+GC耗时)
- Minimum footprint :近可能小的内存占用量
AdaptiveSizePolicy为了达到三个预期目标,涉及以下操作:
- 如果GC停顿时间超过了预期值,会减小内存大小。理论上,减小内存,可以减少垃圾标记等操作的耗时,以此达到预期停顿时间。
- 如果应用吞吐量小于预期,会增加内存大小。理论上,增大内存,可以降低GC的频率,以此达到预期吞吐量。
- 如果应用达到了前两个目标,则尝试减小内存,以减小内存消耗
AdaptiveSizePolicy 看上去很智能,但有时它也很调皮,会引发 GC 问题。
处理
1.关闭AdaptiveSizePolicy策略,同时显式申明survivor区的比例。JVM增加参数
-XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio=8
参考地址
堆内存居高不下,JDK8自适应作怪 :https://www.jianshu.com/p/564017fe8a04
JVM GC 之 [AdaptiveSizePolicy] 实战 : https://www.jianshu.com/p/7414fd6862c5
原文地址:https://www.cnblogs.com/kiko2014551511/p/11512678.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 如何使用OpenCV在Python中访问IP摄像头
- 分享我学习Pandas使用的资料,可能是新手入门Pandas最好的教程!
- 原创 | Git入门教程,详解Git文件的四大状态
- 原创 | ACMer不得不会的线段树,究竟是种怎样的数据结构?
- dplyr包summarize的使用
- Mysql的binlog和relay-log到底长啥样?
- 原创 | matplotlib绘图教程,设置标签与图例
- 原创 | 从抽象类开始,详解责任链模式
- 开发一个渐进式Web应用程序(PWA)前都需要了解什么?
- 知识图谱入门(二)
- 常见编程模式之循环排序
- Python中浅拷贝与深拷贝的骚操作
- 数据概览神器—Pandas-profiling
- 推荐一款MD神器吧:重度MD用户必备神器
- 鸿蒙系统开源