目录

一、四种垃圾回收方法

(1)标记清除

(2)标记整理

(3)复制算法

(4)分代收集

二、垃圾回收机制

jvm内存结构

垃圾回收有两种类型:Minor GC 和 Full GC

1.Minor GC

2.Full GC


一、四种垃圾回收方法

(1)标记清除

标记阶段

清除阶段

缺点:

  • 可能产生内存碎片

  • 有大对象需要分配连续内存空间时,可能二次触发垃圾回收机制

结论:适用于老年代,存活对象较多的情况下比较高效

(2)标记整理

标记阶段

清除阶段

对标记的垃圾进行清理后,将零散的内存空间进行压缩

整理阶段

优点:

  • 避免产生大量内存碎片

缺点:

  • 整体效率较低

(3)复制算法

标记出所有存活的对象,并将这些存活的对象复制到一块新的内存(图中右边内存空间),之后将运来的内存(图中左边内存空间)全部回收。

优点:

  • 效率高,没碎片

  • 仅扫描整个空间一次

缺点:

  • 需要一块空的内存空间

  • 需要复制移动对象

  • 内存利用率较低,且不适合在对象存活率较高的老年底使用

       结论:适用于新生代,即”朝生夕死“

(4)分代收集

分代收集算法就是目前虚拟机使用的回收算法。它解决了标记整理不适用于老年代的问题,将内存分为各个年代。一般情况下将堆区划分为老年代(Tenured Generation)和新生代(Young Generation),在堆区之外还有一个代就是永久代(Permanet Generation)。

在不同年代使用不同的算法,从而使用最合适的算法,新生代存活率低,可以使用复制算法。而老年代对象存活率搞,没有额外空间对它进行分配担保,所以只能使用标记清除或者标记整理算法


二、垃圾回收机制

一般来讲,年轻代分为Eden区和survivor区(两块儿:from和to),且Eden:from:to==8:1:1

jvm内存结构

1)新产生的对象优先分配在Eden区(除非配置了-XX:PretenureSizeThreshold,大于该值的对象会直接进入老年代);

2)当Eden区满了或放不下了,这时候其中存活的对象会复制到from区。

这里,需要注意的是,如果存活下来的对象from区都放不下,则这些存活下来的对象全部进入老年代。之后Eden区的内存全部回收掉;

3)之后产生的对象继续分配在Eden区,当Eden区又满了或放不下了,这时候将会把Eden区和from区存活下来的对象复制到to区(同理,如果存活下来的对象to区都放不下,则这些存活下来的对象全部进入老年代,之后回收掉Eden区和from区的所有内存;

4)如上这样,会有很多对象会被复制很多次(每复制一次,对象的年龄就+1),默认情况下,当对象被复制了15次(这个次数可以通过:-XX:MaxTenuringThreshold来配置),就会进入年老代了;

5)当老年代满了或者存放不下将要进入老年代的存活对象的时候,就会发生一次Full GC(这个是最需要减少的,因为耗时较为严重)。

垃圾回收有两种类型:Minor GC 和 Full GC

1.Minor GC

对新生代进行回收,不会影响到老年代。因为新生代的 Java 对象大多死亡频繁,所以 Minor GC 非常频繁,一般在这里使用速度快、效率高的算法,使垃圾回收能尽快完成。

2.Full GC

也叫 Major GC,对整个堆进行回收,包括新生代和老年代。由于Full GC需要对整个堆进行回收,所以比Minor GC要慢,因此应该尽可能减少Full GC的次数,导致Full GC的原因包括:老年代被写满、永久代(Perm)被写满和System.gc()被显式调用等。

简述JVM垃圾回收机制相关推荐

  1. 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 ...

  2. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收

    JVM垃圾回收机制之堆的分代回收 前言 前文我们了解了Java的GC机制,对于堆中的对象,JVM采用引用计数和可达性分析两种算法来标记对象是否可以清除,本文中我们还会了解到JVM将对分成了不同的区域, ...

  3. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  4. JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探

    一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...

  5. JVM架构、JVM垃圾回收机制、垃圾回收算法、垃圾回收器、JMM(内存模型)

    0 JVM和Java的关系 JDK = JRE + Java开发工具(java,javac,javadoc,javap-) JRE = JVM + Java核心类库 即: JDK = JVM + Ja ...

  6. 2.JVM垃圾回收机制-什么时候回收内存

    在前面的文章中,我们介绍过JVM垃圾回收机制负责的是堆和方法区的内存. 参考:http://blog.csdn.net/u011983531/article/details/49227013 在本篇中 ...

  7. JVM垃圾回收机制及算法

    JVM垃圾回收机制 在Java中,程序员是不需要像C++那样显示的去释放一个对象的内存的,而是由虚拟机自行执行.在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空 ...

  8. 【JVM】JVM垃圾回收机制GC

    文章目录 JVM垃圾回收机制 一.堆内存区域划分 1.1内存分配策略 1.2永久代(Permanent Generation) 1.3元空间(MetaSpace) 二.标记算法 2.1引用计数算法 2 ...

  9. 深入理解JVM—垃圾回收机制

    一.前言 明确垃圾收集器关注的部分:堆和方法区.着重学习如何确定哪些垃圾需要回收.垃圾回收算法以及GC触发条件. 二.如何确定哪些垃圾需要回收 1.引用计数算法 在对象中添加一个引用计数器,每当有一个 ...

  10. JVM垃圾回收机制(超级无敌认真好用,万字收藏篇!!!!)

    文章目录 JVM垃圾回收机制 1 判断对象是否存活的算法 1.1 引用计数器算法 1.2 可达性分析算法 2 对象的四种引用方式 2.1 强引用 2.2 软引用 2.3 弱引用 2.4 虚引用 3 垃 ...

最新文章

  1. 关于学习Python的一点学习总结(2->列表)
  2. xp用光盘安装linux系统安装教程视频,光盘重装xp系统图文教程
  3. 全员远程办公,半年入 1 亿美元:GitHub 的最大竞争对手上市了!
  4. 参赛队员对于第十六届全国大学智能车竞赛的建议-05月
  5. 解决MyEclipse2015启动时:Java was started but returned exit code=1问题
  6. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换
  7. java生成的可执行文件_java生成可执行文件(制作可执行文件)
  8. Perl中state()和localtime()函数
  9. 人工智能:模型与算法 之 启发式搜索
  10. 删除所有的视图,存储过程
  11. ( )不是html的布局标签,不要使用的HTML标签(WEB标准网页布局)
  12. Lintcode9 Fizz Buzz solution 题解
  13. 【渝粤教育】电大中专品牌管理与推广 (2)作业 题库
  14. BERT跨模态之后:占领了视觉常识推理任务榜单TOP 2!
  15. 优秀网页案例教你如何排好内容页
  16. code函数oracle列子,Oracle Pivot函数语法详解及应用实例
  17. Windows系统镜像、PE系统下载地址大全
  18. Electron无边框模式下禁止双击最大化窗口
  19. unity GC机制简单介绍
  20. 视频教程-沐风老师3DMAX基础入门-3Dmax

热门文章

  1. Matlab-SEIR传染病模型预测
  2. 逆波兰表达式 c++
  3. 读书笔记-人月神话8
  4. 智方8000系进销存管理系统 v11.29 绿色
  5. 员工转正述职答辩问什么问题_新员工转正述职答辩.ppt
  6. c语言实现矩阵转置、矩阵乘法
  7. 2023-2029年中国拼团游行业市场运行态势及发展趋向分析报告
  8. 您有一张H5新年贺卡未领取
  9. ipad学计算机二级,‎App Store 上的“计算机等级考试一级最新题库”
  10. 离线强化学习总结!(原理、数据集、算法、复杂性分析、超参数调优等)