Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
转载自https://github.com/pzxwhc/MineKnowContainer/issues/26
参考了 一个面试官对面试问题的分析 中关于 GC 的分析,垃圾回收需要搞清楚 在什么时候,对什么东西,做了什么事情。
在什么时候
首先需要知道,GC又分为minor GC 和 Full Gc(也称为Major GC)。Java 堆内存分为新生代和老年代,新生代中又分为1个Eden区域 和两个 Survivor区域。
那么对于 Minor GC 的触发条件:大多数情况下,直接在 Eden 区中进行分配。如果 Eden区域没有足够的空间,那么就会发起一次 Minor GC;对于 Full GC(Major GC)的触发条件:也是如果老年代没有足够空间的话,那么就会进行一次 Full GC。
Ps:上面所说的只是一般情况下,实际上,需要考虑一个空间分配担保的问题:
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。如果大于则进行Minor GC,如果小于则看HandlePromotionFailure设置是否允许担保失败(不允许则直接Full GC)。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于则尝试Minor GC(如果尝试失败也会触发Full GC),如果小于则进行Full GC。
但是,具体到什么时刻执行,这个是由系统来进行决定,是无法预测的。
对什么东西
主要根据可达性分析算法,如果一个对象不可达,那么就是可以回收的;如果一个对象可达,那么这个对象就不可以回收。对于可达性分析算法,它是通过一系列称为“GC Roots” 的对象作为起始点,当一个对象到 GC Roots 没有任何引用链相接的时候,那么这个对象就是不可达,就可以被回收。如下图:
这个GC Root 对象可以是一些静态的对象,Java方法的local变量或参数, native 方法引用的对象,活着的线程。
做了什么事情
主要做了清理对象,整理内存的工作。Java堆分为新生代和老年代,采用了不同的回收方式。例如新生代采用了复制算法,老年代采用了标记整理法。在新生代中,分为一个Eden 区域和两个Survivor区域,真正使用的是一个Eden区域和一个Survivor区域,GC的时候,会把存活的对象放入到另外一个Survivor区域中,然后再把这个Eden区域和Survivor区域清除。那么对于老年代,采用的是标记整理法,首先标记出存活的对象,然后再移动到一端。这样也有利于减少内存碎片。
Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)相关推荐
- jvm gc垃圾回收机制和参数说明amp;amp;Java JVM 垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
jvm gc(垃圾回收机制) Java JVM 垃圾回收(GC 在什么时候,对什么东西,做了什么事情) 前言:(先大概了解一下整个过程) 作者:知乎用户 链接:https://www.zhihu.c ...
- jvm - 垃圾回收 gc
2019独角兽企业重金招聘Python工程师标准>>> jvm - 垃圾回收 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章中间和末尾处会有标注 垃圾回收 ...
- java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法
本文转自互联网,侵删 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 喜欢的话麻烦点下Star哈 文章将同步到我的个人博客: www.how ...
- 深入Java -JVM 垃圾回收
相比起C和C++的自己回收内存,JAVA要方便得多,因为JVM会为我们自动分配内存以及回收内存. 在之前的JVM 之内存管理中,我们介绍了JVM内存管理的几个区域,其中程序计数器以及虚拟机栈是线程私有 ...
- JVM垃圾回收(GC)
如何识别垃圾 垃圾回收主要方法 分代收集算法 垃圾收集器 JVM参数 测试 如何识别垃圾 引用计数法 对象被引用一次,在它的对象头上加一次引用次数,如果没有被引用(引用次数为 0),则此对象可回收 代 ...
- JVM—垃圾回收GC算法
1 GC算法简介 算法 特点 标记-清除 分为"标记"和"清除"两个阶段 复制 可以解决效率问题,将可用的内存按容量划分为大小相等的两块. 标记-整理 先标记. ...
- java学习笔记-4 JVM垃圾回收(GC)
引言 jvm垃圾回收相关的问题是老生常谈的问题了,相信大家都有所了解,这里再进行相关的探讨,以加深理解.若文中有不正之言,望不吝指正. 本文将围绕以下几个点展开 1.为什么要进行垃圾回收 我们知道jv ...
- JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探
一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...
- Java基础:JVM垃圾回收算法
众所周知,Java的垃圾回收是不需要程序员去手动操控的,而是由JVM去完成.本文介绍JVM进行垃圾回收的各种算法. 1. 如何确定某个对象是垃圾 1.1. 引用计数法 1.2. 可达性分析 2. 典型 ...
- 4、JVM垃圾回收机制、新生代的GC、GC(Minor GC、FullGC)、GC日志、JVM参数选项、元空间(笔记)
4.JVM垃圾回收机制 4.1.新生代的GC 4.1.1.串行GC(SerialGC) 4.1.2.并行回收GC(Parallel Scavenge) 4.1.3.并行GC(ParNew) 4.2.G ...
最新文章
- 「杂谈」AI工业界都有哪些值得参加的比赛?
- 砥砺前行,比特币现金周年国际峰会正式召开
- How Vmware snapshots works
- 无监督构建词库:更快更好的新词发现算法
- context 的理解
- Docker镜像由于代理问题导致不能下载的解决办法
- 通过Java Hipster升级Spring Security OAuth和JUnit测试
- 0编译器详解_详解Java枚举类型(Enum)中的方法
- 浮点类型误区 “!=”
- 我们用计算机做什么大餐英语怎么说,感恩用英语怎么说
- Java Web学习总结(29)——Java Web中的Filter和Interceptor比较
- servlet详解及Tomcat中多线程下的Servlet(1)
- FileInputStreamFileOutputStream
- 和利时dcs系统服务器设置,和利时DCS系统组态流程
- VS2015导出带文件的项目模板
- 学计算机的一直对画画感兴趣,[电脑绘画兴趣小组教学总结]sai电脑绘画入门教学...
- 标准差(standard deviation)
- css实现多余图片隐藏
- 花菁染料|cas146368-08-3-齐岳生物
- win10 10074版本qq显示问题