当前位置:网站首页>JVM垃圾回收什么情况会进入老年代
JVM垃圾回收什么情况会进入老年代
2022-06-26 09:36:00 【zz好好学java】
新生代Minor GC后剩余存活对象太多,无法放入Survivor区中,此时就必须将这些存活对
象直接转移到老年代去,如果此时老年代空间也不够怎么办?
1、执行任何一次Minor GC之前,JVM会先检查一下老年代可用内存空间,是否大于新生代
所有对象的总大小,因为在极端情况下,可能新生代Minor GC之后,新生代所有对象都需要
存活,那就会造成新生代所有对象全部要进入老年代;
2、如果老年代的可用内存大于新生代所有对象总大小,此时就可以放心大胆的对新生代发起
一次Minor GC,因为 Minor GC之后即使所有对象都存活,Survivor区放不下了,也可以转
移到老年代去;
3、如果执行MInor GC之前,检测发现老年代的可用空间已经小于新生代的全部对象总大小,
那么就会进行下一个判断,判断老年代的可用空间大小,是否大于之前每一次Minor GC后进
入老年代的对象的平均大小,如果判断发现老年代的内存大小,大于之前每一次Minor GC
后进入老年代的对象的平均大小,那么就是说可以冒险尝试一下Minor GC,但是此时真的可
能有风险,那就是Minor GC过后,剩余的存活对象的大小,大于Survivor空间的大小,也
大于老年代可用空间的大小,老年代都放不下这些存活对象了,此时就会触发一次“Full GC";
所以老年代空间分配担保机制的目的?也是为了避免频繁进行Full GC;
4、如果Full GC之后,老年代还是没有足够的空间存放Minor GC过后的剩余存活对象,那
么此时就会导致“OOM”内存溢出;
什么情况下对象会进入老年代
1、躲过15次GC之后进入老年代,I可通过JVM参数"-XX:MaxTenuring Threshold" 来设置年龄,默认为15岁;
2、动态对象年龄判断;
3、老年代空间担保机制;
4、大对象直接进入老年代;
大对象是指需要大量连续内存空间的Java对象,比如很长的字符串或者是很大的数组或者
List集合,大对象在分配空间时,容易导致内存明明还有不少空间时就提前触发垃圾回收以
获得足够的连续空间来存放它们,而当复制对象时,大对象又会引起高额的内存复制开销,为
了避免新生代里出现那些大对象,然后屡次躲过GC而进行来回复制,此时JVM就直接把该大,
对象放入老年代,而不会经过新生代;
边栏推荐
- LeetCode 958. Completeness checking of binary tree
- Does the go compiled executable have dynamic library links?
- TensorFlow动态分配显存
- online trajectory generation
- Vscode common programming fonts
- Download MySQL database installation package website of each system and version
- WIN10系统实现Redis主从复制
- LSP 是什么
- Glide's most common instructions
- 动态库连接 - 符号冲突 - 全局符号介入
猜你喜欢

Logview Pro can be used if the log is too large

Redis notes (14) - persistence and data recovery (data persistence RDB and AOF, data recovery, mixed persistence)

What is the web SSH service port of wgcloud

Differences between JVM, Dalvik and art

#云原生征文# 在 Google Kubernetes Cluster 上使用 HANA Expression Database Service

Custom interceptor

WGCLOUD的web ssh服务端口是多少

jar版本冲突问题解决

SSM项目小例子,SSM整合图文详细教程

mysql学习总结
随机推荐
pcl install
From TF 1 X to TF 2.6 (update if you encounter it)
美国总统签署社区安全法案以应对枪支问题
Logical English structure [key points]
国际化配置
TensorFlow动态分配显存
The third-party extension package of thinkphp6.0 supports uploading to Alibaba cloud and qiniu cloud
What is the web SSH service port of wgcloud
cmake / set 命令
存储过程测试入门案例
npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. npm ER
SQL高级教程
MapReduce&Yarn理论
Configuration internationale
c语言语法基础之——指针( 多维数组、函数、总结 ) 学习
Get the clicked position in the recyclerview
Opencv depthframe - > pointcloud causes segmentation fault!
c语言语法基础之——函数定义学习
c语言语法基础之——局部变量及存储类别、全局变量及存储类别、宏定义 学习
Do you know the //go: instructions in the go source code, go:linkname?