专栏首页MySQL入坑记Java垃圾回收的工作原理和最佳做法

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

在本文中,我们将研究Java垃圾回收,它的工作方式以及重要性。

Java垃圾回收的定义

Java垃圾回收是Java程序执行自动内存管理的过程。Java程序编译为字节码,可以在Java虚拟机(简称JVM)上运行。当Java程序在JVM上运行时,将在堆上创建对象,这是专用于该程序的内存的一部分。最终,将不再需要某些对象。垃圾收集器找到这些未使用的对象并将其删除以释放内存。

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垃圾收集的最大好处是,它可以自动处理未使用的对象或无法访问的对象的删除, 以释放重要的内存资源。使用无垃圾收集的语言(例如C和C ++)工作的程序员必须在其代码中实现手动内存管理。

尽管需要额外的工作,但一些程序员还是主张手动内存管理胜于垃圾回收,这主要是出于控制和性能方面的考虑。尽管有关内存管理方法的争论仍在继续,但垃圾收集现在已成为许多流行编程语言的标准组成部分。对于垃圾收集器会对性能产生负面影响的方案,Java提供了许多选项来调整垃圾收集器以提高其效率。

Java垃圾收集最佳实践

对于许多简单的应用程序,Java垃圾回收不是程序员需要自觉考虑的事情。但是,对于希望提高Java技能的程序员来说,了解Java垃圾回收的工作方式以及如何对其进行调整非常重要。

除了垃圾收集的基本机制外,了解Java中垃圾收集的最重要要点之一是它不是确定性的,无法预测运行时何时进行垃圾收集。可以在代码中包含一个提示,以使用System.gc()或Runtime.gc()方法运行垃圾收集器,但它们不能保证垃圾收集器会真正运行。

调整Java垃圾收集的最佳方法是在JVM上设置标志。标志可以调整要使用的垃圾收集器(例如,Serial,G1等),堆的初始和最大大小,堆段的大小(例如,Young Generation,Old Generation)等等。被调整的应用程序的性质是很好的设置初始指南。例如,并行垃圾收集器效率很高,但经常会导致“世界停止”事件,使其更适合后端处理,在这种情况下可以长时间停顿垃圾收集。

另一方面,CMS垃圾收集器旨在最大程度地减少暂停,使其非常适合响应性很重要的GUI应用程序。可以通过更改堆或堆的大小并使用jstat之类的工具测量垃圾收集效率来完成其他微调。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 人工智能 - 语音识别的技术原理是什么

    转自:https://www.zhihu.com/question/20398418/answer/18080841

    陈哈哈
  • https请求报错block:mixed-content问题的解决办法(已解决)

    今天,多个接口突然出现 block:mixed-content 错误,于是排查了一下发现:

    陈哈哈
  • SQL优化的意义是什么?你用过哪些优化方式

    随着系统的数据量逐年增加,并发量也成倍增长,SQL性能越来越成为IT系统设计和开发时首要考虑的问题之一。SQL性能问题已经逐步发展成为数据库性...

    陈哈哈
  • 洋垃圾“漂洋过海”到中国:纽约的垃圾回收之旅

    纽约每年会产生约1400万吨城市垃圾,并需花费23亿美元政府资金来处理。这些垃圾有的会被就地掩埋,有的会被回收再利用,有的甚至被卖往7000英里外的中国等地。在...

    DT数据侠
  • 程序员如何不被垃圾分类逼疯?

    今天是《上海市生活垃圾管理条例》施行的第2天,这场被称为“史上最严”垃圾分类多次成功占据热搜头条。

    养码场
  • 数据告诉你 | 垃圾围城,分类真的有用吗?

    眼前的湿不是湿,你说的干是什么干?站在垃圾分类桶前,DT君的卡姿兰大眼睛里充满疑惑。

    CDA数据分析师
  • jvm垃圾回收以及垃圾回收器

    ? ? ? ? ? ? ? 垃圾回收器 ? ? ? ? ? ?

    lyb-geek
  • 逼死上海宁的垃圾分类“太难了”?快来VR游戏恶补一下!

    提起近期最能引起“社会恐慌”的新闻,大概就是“垃圾分类”了吧。对于上海人来说,这辈子没有为垃圾拼过命,都不算是真正活过……

    VRPinea
  • 垃圾分类:“新时尚”的美丽折射

    “垃圾分类,利国利民。小庙子村的各位父老乡亲,请自觉做好垃圾分类……”一大早,天蒙蒙亮,村民张玉奎就开着垃圾清运三轮车,开始在村子里来回转悠。三轮车大喇叭传出的...

    ssssssssssssssssssssssssssss
  • 《校园垃圾分类闭卷考试》附答案

    ? 近期,网友们被各种灵魂拷问 食堂阿姨:要饭吗? 快递小哥:你是什么东西? 配钥匙师傅:你配吗? 出租车师傅:你的定位是什么? 垃圾分拣阿姨:你是什么垃圾...

    鹅老师

扫码关注云+社区

领取腾讯云代金券