网易首页 > 网易号 > 正文 申请入驻

图解 Java 垃圾回收机制,写得非常好!

0
分享至

原文:https://dwz.cn/UrCZL9XA
译文:https://dwz.cn/tlhgis7R
翻译:Rhys_Lee, AzureSora, 溪边九节, 小小菜鸟鸡

Java架构/分布式:705127209(大牛交流群)没有开发经验勿加!

什么是自动垃圾回收?

自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。

所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。

在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文接下来将介绍垃圾回收机制的基本过程。

第一步:标记

垃圾回收的第一步是标记。垃圾回收器此时会找出哪些内存在使用中,还有哪些不是。

上图中,蓝色表示已引用对象,橙色表示未引用对象。垃圾回收器要检查完所有的对象,才能知道哪些有被引用,哪些没。如果系统里所有的对象都要检查,那这一步可能会相当耗时间。

第二步:清除

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

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

压缩

为了提升性能,删除了未引用对象后,还可以将剩下的已引用对象放在一起(压缩),这样就能更简单快捷地分配新对象了。

为什么需要分代垃圾收集?

之前说过,逐一标记和压缩 Java 虚拟机里的所有对象非常低效:分配的对象越多,垃圾回收需时就越久。不过,根据统计,大部分的对象,其实用没多久就不用了。

来看个例子吧。(下图中,竖轴代表已分配的字节,而横轴代表程序运行时间)

上图可见,存活(没被释放)的对象随运行时间越来越少。而图中左侧的那些峰值,也表明了大部分对象其实都挺短命的。

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发现某些类不再需要,并且其他类可能需要空间,则这些类可能会被回收。

世代垃圾收集过程

现在你已经理解了为什么堆被分成不同的代,现在是时候看看这些空间是如何相互作用的。 后面的图片将介绍JVM中的对象分配和老化过程。

首先,将任何新对象分配给 eden 空间。 两个 survivor 空间都是空的。

当 eden 空间填满时,会触发轻微的垃圾收集。

引用的对象被移动到第一个 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,清理并最终压缩该空间。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
突发!傅昆萁率16蓝委访陆,柯文哲称大陆会梭哈,台陆委会提条件

突发!傅昆萁率16蓝委访陆,柯文哲称大陆会梭哈,台陆委会提条件

王大健美食日常
2024-04-26 17:57:00
北条麻妃 今日写真

北条麻妃 今日写真

娱乐八卦木木子
2024-04-26 17:27:23
国产芯片最新消息来了——

国产芯片最新消息来了——

半月谈APP
2024-04-26 17:10:12
4月26日俄乌最新:西方的新共识

4月26日俄乌最新:西方的新共识

西楼饮月
2024-04-26 10:19:29
拉基蒂奇:14/15赛季欧冠冠军是欧冠历史上含金量最高的一届

拉基蒂奇:14/15赛季欧冠冠军是欧冠历史上含金量最高的一届

懂球帝
2024-04-26 11:27:09
全球仅一台在中国!禁止出售的国之重器,100%国产碾压欧美技术

全球仅一台在中国!禁止出售的国之重器,100%国产碾压欧美技术

吃鱼思故渊
2024-04-25 21:57:24
国际机场开工?济南商河公安:造谣!拘留

国际机场开工?济南商河公安:造谣!拘留

环球网资讯
2024-04-26 18:32:25
这应该是一位女乘客留下来的。写在高铁提供的垃圾袋上,字迹不错

这应该是一位女乘客留下来的。写在高铁提供的垃圾袋上,字迹不错

作家李楠枫
2024-04-23 22:41:54
拉基蒂奇:魔笛&克罗斯还在皇马培养年轻球员 巴萨的换代则太快了

拉基蒂奇:魔笛&克罗斯还在皇马培养年轻球员 巴萨的换代则太快了

直播吧
2024-04-26 19:47:16
1000 亿美元、出售 TikTok(不含算法):字节跳动称是谣言

1000 亿美元、出售 TikTok(不含算法):字节跳动称是谣言

云头条
2024-04-25 23:02:11
1-0!泰山终结成都5连胜,王大雷神扑,争冠乱了,崔康熙略胜一筹

1-0!泰山终结成都5连胜,王大雷神扑,争冠乱了,崔康熙略胜一筹

小金体坛大视野
2024-04-26 22:02:05
英首相称中国“威权主义国家”,中方对他的称呼变了,性质严重了

英首相称中国“威权主义国家”,中方对他的称呼变了,性质严重了

说天说地说实事
2024-04-25 20:10:30
我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

叶天辰故事会
2024-04-23 22:26:35
陕西高二女生在校内产子,调查后发现,孩子父亲的身份不简单

陕西高二女生在校内产子,调查后发现,孩子父亲的身份不简单

纪实录
2023-12-25 19:22:17
合适吗?任骏飞受伤倒地后,孙铭徽大喊:人不行了,快点急救

合适吗?任骏飞受伤倒地后,孙铭徽大喊:人不行了,快点急救

懂球帝
2024-04-26 08:59:08
1971年,毛主席对刘兴元、丁盛叹息:你们和黄永胜的关系太深了

1971年,毛主席对刘兴元、丁盛叹息:你们和黄永胜的关系太深了

历史龙元阁
2024-04-25 20:39:40
美国下令中国电信公司停止通过美国子公司运营宽带互联网服务!

美国下令中国电信公司停止通过美国子公司运营宽带互联网服务!

AI商业论
2024-04-26 14:17:30
一连两天,赖清德称想跟大陆对话,抛出三个条件,国台办给出答复

一连两天,赖清德称想跟大陆对话,抛出三个条件,国台办给出答复

李大娱乐糊涂
2024-04-26 13:16:31
原安徽省食品药品监督管理局局长刘自林接受审查调查

原安徽省食品药品监督管理局局长刘自林接受审查调查

界面新闻
2024-04-26 09:53:07
朱军六十大寿!谭梅晒夫妻合照为丈夫庆生,无意返聘央视钻研书画

朱军六十大寿!谭梅晒夫妻合照为丈夫庆生,无意返聘央视钻研书画

娱小小新
2024-04-26 14:30:58
2024-04-26 22:18:44
Java架构分享
Java架构分享
专注开发,分享心得
276文章数 8894关注度
往期回顾 全部

科技要闻

车展观察|德系日系绝不能放弃中国市场

头条要闻

德国驻华大使称被中国外交部召见 外交部回应

头条要闻

德国驻华大使称被中国外交部召见 外交部回应

体育要闻

库里当选最佳关键球员 10项数据联盟第一

娱乐要闻

金靖回应不官宣恋情结婚的原因

财经要闻

贾跃亭,真他娘是个人才

汽车要闻

2024北京车展 比亚迪的自驱力让对手紧追猛赶

态度原创

艺术
游戏
手机
健康
公开课

艺术要闻

日居月諸:莊聲濤新墨作品展

《剑星》女主服装被“和谐” 玩家怒喷官方不信守承诺

手机要闻

重回第一!华为手机出货量大爆发:苹果节节败退,销量大幅下滑

这2种水果可降低高血压死亡风险

公开课

睡前进食会让你发胖吗?

无障碍浏览 进入关怀版