当前位置:网站首页>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就直接把该大,
对象放入老年代,而不会经过新生代;
边栏推荐
- Notes on sports planning on November 22, 2021
- Luogu 1146 coin flip
- online trajectory generation
- exec系列函数(execl、execlp、execle、execv、execvp)使用
- npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead. npm ER
- 【深度优先搜索】312.戳气球
- 2021 national vocational college skills competition (secondary vocational group) network security competition questions (1) detailed analysis tutorial
- The basis of C language grammar -- function definition learning
- Flink入门——单词统计
- 全渠道、多场景、跨平台,App如何借助数据分析渠道流量
猜你喜欢

Summary of common commands of vim

Cloud native essay using Hana expression database service on Google kubernetes cluster

Software testing - how to select the appropriate orthogonal table

VI summary of common commands

Automated testing -- Introduction and use of pytest itself and third-party modules

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

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

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

如何更改微信小程序二维码物料颜色

国际化配置
随机推荐
thymeleaf中抽取公共片段
Detailed explanation of the network security competition questions (2) of the 2021 national vocational college skills competition (secondary vocational group)
Battery historian analyzes battery consumption
I am in Zhongshan. Where can I open an account? Is online account opening safe?
c语言语法基础之——指针(字符、一维数组) 学习
Control setting layout in linear layout_ Gravity doesn't work?
Redis novice introduction
如何更改微信小程序二维码物料颜色
Internationalization configuration
Logical English structure [key points]
Differences between JVM, Dalvik and art
The basis of C language grammar -- factoring by function applet
自动化测试——pytest本身及第三方模块介绍及使用
This new change of go 1.16 needs to be adapted: the changes of go get and go install
pcl install
Speed test of adding, deleting, modifying and querying 5million pieces of data in a single MySQL table
LeetCode 0710.黑名单中的随机数 - 预处理实现O(1)取值
SQL advanced tutorial
install ompl. sh
Problems encountered by jupyter notebook