Java垃圾回收的工作原理和最佳做法

Java垃圾回收如何工作

Java垃圾收集是一个自动过程。程序员不需要显式标记要删除的对象。垃圾回收实现位于JVM中。每个JVM都可以实现垃圾回收,但是它很高兴。唯一的要求是它符合JVM规范。尽管有许多JVM,但Oracle的HotSpot是迄今为止最常见的。它提供了一套强大而成熟的垃圾收集选项。

尽管HotSpot具有针对各种用例进行了优化的多个垃圾收集器,但其所有垃圾收集器都遵循相同的基本过程。第一步,识别未引用的对象并将其标记为可进行垃圾回收。第二步,删除标记的对象。(可选)可以在垃圾回收器删除对象之后压缩内存,以便剩余的对象在堆开始时位于连续的块中。压缩过程使在分配给现有对象的内存块之后更容易按顺序将内存分配给新对象。

HotSpot的所有垃圾收集器都实现了按年龄分类对象的分代垃圾收集策略。世代垃圾收集背后的基本原理是,大多数对象都是短暂的,并且在创建后不久就可以进行垃圾收集了。

堆分为三个部分:

  • 年轻一代:新创建的对象始于年轻一代。年轻一代又细分为Eden空间和所有Survivor空间,在Eden空间中所有新对象都开始运行,在其中一个垃圾收集周期结束后,对象从Eden中移出。当从Young Generation收集对象时,这是次要的垃圾收集事件。

  • **老一代:**寿命长的对象最终从年轻一代迁移到老一代。从上一代垃圾回收对象时,这是一个重要的垃圾回收事件。

  • **永久生成:**元数据(例如类和方法)存储在永久生成中。不再使用的类可能是从永久代收集的垃圾。

在完全垃圾收集事件期间,所有代中未使用的对象将被垃圾收集。

HotSpot有四个垃圾收集器:

  • **串行:**所有垃圾回收事件都在一个线程中串行进行。在每个垃圾回收之后执行压缩。

  • **并行:**多个线程用于次要垃圾回收。单线程用于大型垃圾回收和旧式压缩。另外,Parallel Old变量使用多个线程进行主要垃圾收集和Old Generation压缩。

  • **CMS(并发标记扫描):**使用与并行相同的算法,多个线程用于次要垃圾回收。大型垃圾收集是多线程的,例如Parallel Old,但是CMS与应用程序进程同时运行,以最大程度地减少“停止世界”事件(即,当垃圾收集器正在运行时停止应用程序)。不执行压缩。

  • **G1(垃圾优先):**最新的垃圾收集器旨在替代CMS。它像CMS一样是并行和并发的,但是与较旧的垃圾收集器相比,它的工作原理却大相径庭。

Java垃圾收集的好处

最后

码字不易,觉得有帮助的可以帮忙点个赞,让更多有需要的人看到

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考

以下是部分内容截图
架构面试专题及架构学习笔记导图.png

大家作为参考

以下是部分内容截图
[外链图片转存中…(img-4LuGqisc-1714347347457)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值