Minor GC 和 Full GC的时机
一、对象何时能够进入老年代
- GC年龄判定
每进行一次GC过程,存活的对象的GC年龄都会+1;当对象逃过15次GC,年龄达到15岁时,即可进入老年代
可以通过-XX:MaxTenuringThreshld来设置岁数,默认是15,一般不需要修改。
2. 动态对象年龄判定
当前使用的Survivor区存活的对象,相同年龄的对象的总内存大小大于这块Survivor区大小的50%时,该Survivor区的所有年龄大于等于该年龄的对象直接进入老年代,而不需 要经过15次GC;
3. 大对象直接进入老年代
通过-XX:PretenureSizeThreshold设置对象的大小(单位:字节),当创建的对象大小大于该值时,直接进入老年代;
4. Minor GC后的对象太多,无法再保存到Survivor区了
直接加入到老年代。
二、Minor GC
当Eden和其中一个Survivor满了的时候,就需要执行Minor GC了。
每次执行Minor GC之前,都需要判断当前老年代的可用内存大小是否大于新生代的对象大小
1. 当老年代可用大小大于新生代的对象大小时,可以安全的执行Minor GC,因为考虑到最坏的情况,所有的对象均存活,且大于另一个空的Survivor区,那么全部进入老年代;
2. 当老年代的大小小于新生代的对象大小时,则开始判断是否设置了-XX:-HandlePromotionFailure参数,如果没有设置,那么执行一次Full GC ,再执行Minor GC;
3. 如果设置了-XX:-HandlePromotionFailure参数,那么判断一下老年代的剩余内存大小是否小于之前Minor GC进入老年代的对象的大小的平均值,如果小于的话,那么先执行一 次Full GC ,再执行Minor GC;
4. 如果老年代的可用大小大于每次Minor GC 进入老年代对象大小的平均值,那么冒险进行Minor GC,可能的情况如下3种
4.1 Minor GC后,存活的对象大小放入另一个空的Survivor区域;
4.2 Minor GC后,存活的对象大小大于Survivor大小,但是小于老年代的可用内存大小,那么存活对象放入老年代;
4.3 Minor GC后,存活的对象大小小于老年代的剩余内存大小,此时会触发一个Full GC,释放老年代的内存空间,如果此时还是不能存下新生代过来的对象,那么就会报出 OOM 内存溢出。
Minor GC 和 Full GC的时机的更多相关文章
- GC详解及Minor GC和Full GC触发条件总结
GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...
- GC详解及Minor GC和Full GC触发条件
GC,即就是Java垃圾回收机制.目前主流的JVM(HotSpot)采用的是分代收集算法.与C++不同的是,Java采用的是类似于树形结构的可达性分析法来判断对象是否还存在引用.即:从gcroot开始 ...
- Java GC工作原理以及Minor GC、Major GC、Full GC简单总结
名词解释: GC:垃圾收集器 Minor GC:新生代GC,指发生在新生代的垃圾收集动作,所有的Minor GC都会触发全世界的暂停(stop-the-world),停止应用程序的线程,不过这个过程非 ...
- Java虚拟机6:内存溢出和内存泄露、并行和并发、Minor GC和Full GC、Client模式和Server模式的区别
前言 之前的文章尤其是讲解GC的时候提到了很多的概念,比如内存溢出和内存泄露.并行与并发.Client模式和Server模式.Minor GC和Full GC,本文详细讲解下这些概念的区别. 内存溢出 ...
- Minor GC、Major GC和Full GC之间的区别(转)
在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...
- minor gc 和 full gc
JAVA中关于GC的分析中,需要搞清楚,GC线程在什么时候,对什么东西,做了什么操作. 1-在什么时候 首先需要知道,GC分为minor GC和full GC,JAVA内存分为新生代和老年代,新生代中 ...
- Minor GC、Major GC和Full GC之间的区别
在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...
- JVM垃圾回收(二)- Minor GC vs Major GC vs Full GC
Minor GC vs Major GC vs Full GC 垃圾回收的活动会清理对内存中的不同区域,这些事件一般被称为Minor,Major以及Full GC events.本章我们会讨论这些清理 ...
- Minor GC 与Full GC有什么不一样
新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也非常快 老年代GC(Major GC/Full GC ...
- gc之六--Minor GC、Major GC、Full GC以及Mixed GC之间的区别
目录: GC之一--GC 的算法分析.垃圾收集器.内存分配策略介绍 GC之二--GC日志分析(jdk1.8)整理中 GC之三--GC 触发Full GC执行的情况及应对策略 gc之四--Minor G ...
随机推荐
- 【linux】i2c使用分析&源码实战
目录 前言 1. 设备检查命令 1.1 查看I2C驱动 1.2 i2c-tools 1.2.1 I2C-detect安装 1.2.2 i2cdetect 命令 1.2.3 i2cget 命令 1.2. ...
- 渗透入门rop
原文链接:https://blog.csdn.net/guiguzi1110/article/details/77663430?locationNum=1&fps=1 基本ROP 随着NX保护 ...
- 03Python网络编程之单线程服务端
# 对于单线程的服务端,我们借助于zen_utils(我们自己编写好的一些函数)是很容易就实现的.# 导入这个模块import zen_utilsif __name__ == '__main__': ...
- 微软面试题: LeetCode 151. 翻转字符串里的单词 出现次数:6
题目描述: 给定一个字符串,逐个翻转字符串中的每个单词. 说明: 无空格字符构成一个 单词 .输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括.如果两个单词间有多余的空格,将反转后 ...
- (七)if/else就是goto
一.CPU如何执行指令 CPU上有数以亿计的晶体管组层的复杂电路,我们先不用管具体电路如何实现:逻辑上我们可以认为CPU由许多寄存器组成,而这些寄存器又由许多锁存器和触发器组成,N个锁存器或触发器就可 ...
- moviepy音视频剪辑:追踪人脸打马赛克的三种实现方式
☞ ░ 前往老猿Python博文目录 ░ 一.引言 在moviepy官网的案例<Tracking and blurring someone's face>和CSDN的moviepy大神uc ...
- PyQt学习随笔:Qt中Model/View相关的主要类及继承关系
View相关类类继承关系: Model相关类类继承关系:
- MacOS上Parallels Desktop安装MacOSHighSierra
下载dmg文件 http://www.macoshome.com/macos/977.html 配置宿主机时间2015-10-27 23:25 为了防止"macOS未能安装在您的电脑上_安装 ...
- Mac开发必设置的Finder设置项,你设置了吗?
1.显示标签页.显示路径栏.显示状态栏的设置位置,在访达->显示-> 显示状态栏 个人三个都设置了,但是觉得显示状态栏用的并不多,反而多一行,下面是显示状态栏的效果,主要可以一眼看出有多少 ...
- 第 5 篇 Scrum 冲刺博客
每天举行会议 会议照片: 昨天已完成的工作与今天计划完成的工作及工作中遇到的困难: 成员姓名 昨天完成工作 今天计划完成的工作 工作中遇到的困难 蔡双浩 实现重设计个人界面的功能添加 实现关注,被关注 ...