什么是自动

自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。

在用 C 之类的编程语言时,

第一步:标记

这个过程的第一步叫做标记。这一阶段,垃圾回收器识别哪些内存正在使用,哪些内存未被使用。

被引用的对象以蓝色展示。未被引用的对象以金黄色展示。在标记阶段,所有对象都需要扫描并做出判断。如果系统中的所有对象都必须扫描到,这将是一个非常耗时的过程。

第二步:清除

这一步会删掉标记出的未引用对象。

内存分配器会保留指向可用内存的引用,以供分配新对象。

压缩

为了提升性能,

为什么使用分代垃圾回收?

如前所述,标记并整理所有

下面是这类

正如你所看到的,随着时间的推移,仍然存活的对象越来越少。事实上,大多数对象的

JVM 分代

根据之前的规律,就可以用来提升 JVM 的效率了。方法是,把堆分成几个部分(就是所谓的分代),分别是新生代、老年代,以及永生代。

新对象会被分配在新生代内存。一旦新生代内存满了,就会开始对死掉的对象,进行所谓的小型垃圾回收过程。一片新生代内存里,死掉的越多,回收过程就越快;至于那些还活着的对象,此时就会老化,并最终老到进入老年代内存。

Stop the World 事件 —— 小型垃圾回收属于一种叫 "Stop the World" 的事件。在这种事件发生时,所有的程序

老年代用来保存长时间存活的对象。通常,设置一个阈值,当达到该年龄时,年轻代对象会被移动到老年代。最终老年代也会被回收。这个事件成为 Major GC。

Major GC 也会触发STW(Stop the World)。通常,Major GC会慢很多,因为它涉及到所有存活对象。所以,对于响应性的应用程序,应该尽量避免Major GC。还要注意,Major GC的STW的时长受年老代垃圾回收器类型的影响。

永久代包含JVM用于描述应用程序中类和方法的元数据。永久代是由JVM在运行时根据应用程序使用的类来填充的。此外,Java SE类库和方法也存储在这里。

如果JVM发现某些类不再需要,并且其他类可能需要

分代垃圾回收过程

既然已经了解了为什么将堆分成不同的代,现在就该看看这些空间到底是如何交互的。下面的

首先,任何新对象都在Eden区分配。两个survivor区都是空的。

当Eden区满了,触发一次Minor GC。

被引用的对象被移动到第一个Survivor区,未被引用的对象会在Eden区清除时一并删除。

在下一次Minor GC中,Eden区也会做同样的操作。删除未被引用的对象,并将被引用的对象移动到Survivor区。然而,这里,他们被移动到了第二个Survivor区(S1)。此外,第一个Survivor区(S0)中,在上一次Minor GC幸存的对象,会增加年龄,并被移动到S1中。待所有幸存对象都被移动到S1后,S0和Eden区都会被清空。注意,Survivor区中有了不同年龄的对象。

在下一次Minor GC中,会重复同样的操作。不过,这一次Survivor区会交换。被引用的对象移动到S0,。幸存的对象增加年龄。Eden区和S1被清空。

此幻灯片演示了 promotion。 在较小的GC之后,当老化的物体达到一定的年龄阈值(在该示例中为8)时,它们从年轻一代晋升到老一代。

随着较小的GC持续发生,物体将继续被

所以这几乎涵盖了年轻一代的整个过程。 最终,将主要对老一代进行GC,清理并最终压缩该空间。

Linux公社的RSS地址:

本文永久更新链接地址:

java垃圾回收 分代_Java 垃圾回收机制 (分代垃圾回收ZGC)相关推荐

  1. java控制分屏_java实现arcgis地图分屏(双图)

    java实现arcgis地图分屏(双图) java实现arcgis地图分屏(双图) 本博文采用Java语言,利用arcgis api for javascript 4.16地图服务,实现地图分屏,直接 ...

  2. java分桃子_Java经典编程题分桃子

    海滩上有若干个一堆桃子,五只猴子来分.第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份. 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中, ...

  3. java的三大体系分为_java的三大体系分别是什么

    JavaSE:叫做JavaStandardEdition,它包含Java基本类库和语法.主要用于开发图形用户界面(GUI).复杂逻辑和高性能桌面应用.JavaSE分为四个组件:JVM(Java虚拟机) ...

  4. java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图

    Java高级----异常处理机制.自定义异常----含思维导图 Java高级----异常处理机制.自定义异常----含思维导图 南一Java自学交流QQ群: 586012641 拒绝任何广告,共享Ja ...

  5. java多线程编程是什么_Java多线程程序设计机制是什么?

    1) 新建:当一个Thread类或者其子类的对象被声明并创建时,新的线程对象处于新建状态,此时它已经有了相应的内存空间和其他资源. 2) 就绪:处于新建状态的线程被启动后,将进入线程队列排队等待CUP ...

  6. java判断对象无数据_java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值...

    1.java利用反射机制判断对象的属性是否为空: Map validateMap = new LinkedHashMap(); validateMap.put("serial", ...

  7. java bean的反射类_JAVA中反射机制五(JavaBean的内省与BeanUtils库)

    内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...

  8. java hibernate 分页取数_java – Hibernate分页机制

    我试图使用Hibernate分页查询(PostgreSQL) 我为我的sql查询设置了setFirstResult(0),setMaxResults(20).我的代码如下: Session sessi ...

  9. java生成cmd jar包_Java程序运行机制及cmd编译运行探究(二) cmd编译运行Java程序并打成jar包...

    目标:写一个RandomUtils.java工具类,返回一个随机数,并把这个类的字节码文件打成jar包 在Java运行机制及cmd编译运行探究(一)准备工作一文中,我总结了一部分要用到的cmd及编译运 ...

  10. java三个技术平台_Java的3个平台有什么区别

    展开全部 平台的区别和关系如下: 一.定义和应用范围:62616964757a686964616fe78988e69d8331333365666235J2SE包含于J2EE中,J2ME包含了J2SE的 ...

最新文章

  1. es文件ftp服务器,es文件夹 ftp服务器
  2. 主题模型、LDA、LSA、LSI、pLSA
  3. CodeForces - 1076D Edge Deletion(最短路+贪心/最短路树+bfs)
  4. @select注解_mybatis开发,你用 xml 还是注解?我 pick xml
  5. Hadoop集群安装与配置
  6. 教你如何写框架------用中文构建脚本
  7. LeetCode OJ - Path Sum II
  8. 1. PSR-1 --- 基本代码规范
  9. 配置IP Phone在CUCME路由器上注册
  10. MySQL+Navicat安装教程
  11. zkonline java_U.ARE.U4000B指纹仪,ZKOnline SDK,java服务器端指纹特征码验证--转载
  12. 遥感应用中影像最佳波段组合分析详细过程
  13. Excel应用技巧之二——常用函数
  14. 考HCIE大概需要多少钱?
  15. 网卡82546驱动linux,Linux e1000e网卡驱动
  16. (3)Mathpix Snipping Tool——公式截图获取工具(转为LaTex、MarkDown格式)
  17. 《Node.js开发指南》MicroBlog项目的问题汇总
  18. 如何做好客户维护与服务器,如何做好客户维护关系与管理
  19. java datetime转int_java日期int和String互转
  20. STM32通用Bootloader——FOTA

热门文章

  1. 关于接入层交换机启用STP或是Loopback-detection
  2. node.js使用ass生成视频字幕(下)
  3. 微信公众号怎么添加外链
  4. 计算机专业 拒绝清华,我国最任性的学霸,因离家太远拒绝清华,因专业不合适拒绝哈佛...
  5. 一文讲透TCP/IP协议 | 图解+秒懂+史上最全
  6. 小红书点赞收藏有什么用_小红书点赞收藏平台 小红书粉丝快刷社区
  7. unity跨场景保存(跨场景BGM的连续播放)
  8. mac合上盖子不锁屏_Mac如何设置锁屏不待机
  9. Portraiture全新4.0最新版人像磨皮插件更新内容
  10. Java StringBuffer类的一些常用方法