当前位置:网站首页>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就直接把该大,
对象放入老年代,而不会经过新生代;
边栏推荐
- Druid data source for background monitoring
- Enter the page input box to automatically obtain the focus
- Cento7.7 elk installation simple record
- logback
- c语言语法基础之——指针( 多维数组、函数、总结 ) 学习
- 测试实践——app 测试注意点
- Battery historian analyzes battery consumption
- Software testing - how to select the appropriate orthogonal table
- 力扣------从数组中移除最大值和最小值
- Leetcode refers to offer II 091 Paint house - modify in place
猜你喜欢

Go learning notes (83) - code specification and common development skills

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

MySQL learning summary

力扣------从数组中移除最大值和最小值

This new change of go 1.16 needs to be adapted: the changes of go get and go install

A list of common methods for customizing paint and canvas of view

mysql学习总结

logback

The 100000 line transaction lock has opened your eyes.

Logview Pro can be used if the log is too large
随机推荐
Day 3 array, pre post, character space, keyword and address pointer
The basis of C language grammar -- function definition learning
TensorFlow遇到的各种错误
Vscode common programming fonts
國際化配置
LeetCode 剑指 Offer II 091.粉刷房子 - 原地修改
力扣------从数组中移除最大值和最小值
Enter the page input box to automatically obtain the focus
测试须知——常见接口协议解析
DAY 3 数组,前置后置,字符空间,关键词和地址指针
Leetcode connected to rainwater series 42 (one dimension) 407 (2D)
爬虫相关文章收藏:pyppeteer 、Burpsuite
动态库连接 - 符号冲突 - 全局符号介入
The basis of C language grammar -- learning of local variables and storage categories, global variables and storage categories, and macro definitions
存储过程测试入门案例
Specific implementation comparison between different programming languages
LeetCode 接雨水系列 42.(一维) 407.(二维)
Various errors encountered by tensorflow
[trajectory planning] testing of ruckig Library
微软 Edge 浏览器 IE 模式标签页出现卡死情况,已通过回滚更新修复