云时代的 JVM 原理与实战
康杨
京东资深架构师
3111 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
云时代的 JVM 原理与实战
15
15
1.0x
00:00/00:00
登录|注册

13|对象回收(上):如何定位待回收的对象?

你好,我是康杨。
在前面几节课中我们主要聊的是对象的创建,也提到了对象的创建与回收相辅相成,相互影响。从今天开始,我们就重点谈一谈对象的回收,也就是 GC。
所谓垃圾是指对象已经结束了它在运行态下的生命周期,但是依然占据着运行态下堆内存的空间。此时,就需要对该对象所占用的堆内存空间进行回收,以分配给新的待创建的对象。在 Java 中,垃圾内存的回收是由 JVM 自动完成的,但是深入掌握 GC,依然是我们写出安全、可靠、高性能的 Java 程序的基础。这也是 Java 程序员必备的技能和面试中的必考点。
作为 GC 系列的开篇,本节课我们会一起聊聊 GC 的起源、GC 的作用,以及 JVM 是如何快速定位待回收对象的。

什么是 GC?

GC 是 Garbage Collection 的缩写,中文叫做垃圾回收。它是一种自动化的内存管理机制,能够识别和回收不再使用的内存空间。在 Java 里,JVM 负责 GC。通过这种方式,Java 程序员无需手动进行内存的分配和回收,从而降低了内存泄漏的风险,提高了开发效率。

GC 的起源

GC 的概念并非来源于 Java,而是诞生自 1960 年 MIT 的 Lisp 语言,那时候,计算机科学家很有远见地提出了利用自动化技术进行内存管理的可能性。经过几十年的发展,GC 技术在计算机系统的各个领域都得到了广泛地应用。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

GC(垃圾回收)是Java内存管理的重要机制,通过自动识别和回收不再使用的内存空间,降低了内存泄漏的风险,提高了开发效率。GC的起源可以追溯到1960年的Lisp语言,而在JVM中,GC主要应用于堆区和方法区的内存管理。其主要目标是减少内存泄漏、提升内存利用率和降低内存管理成本。GC的主要步骤包括标记、清除、整理和再分配,其中标记阶段通过引用计数法和可达性算法确认可回收对象,并通过GC Root快速定位待回收对象。在实际应用中,GC Root包括类加载器、方法区中的静态变量和常量、虚拟机栈中的本地变量和参数等。GC的安全点选择是基于让程序长时间执行的指令作为安全点,以减少对程序性能的影响。GC的实现方式和优化策略对于Java程序员来说是必备的技能和面试必考点。 GC是一种自动化的内存管理机制,JVM借助GC机制帮我们降低内存管理成本,同时有效提高内存使用率,并减少内存泄漏。随着硬件的快速发展和大并发、低延时的要求,GC也在朝着管理更大内存、实现更低延时的方向努力。虽然已经出现了ZGC和更新的Shenandoah,但是JDK 11以上版本中 G1 还是当前的主流。 GC主要包括标记、清除、整理和再分配4个阶段。在标记阶段,JVM是通过GC root借用引用分析法来定位待回收对象的。 思考题:1. JDK11以后的版本中使用最多的垃圾回收器是什么? 2. JVM是如何找到待回收对象的? GC的实现方式和优化策略对于Java程序员来说是必备的技能和面试必考点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《云时代的 JVM 原理与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:本地方法区一定有吗? 假如Java程序没有用到本地方法,比如最简单的”Hello World”程序,还会有本地方法区吗?另外,本地方法区是鱼JNI开发有关吗? Q2:哪些变量会放到方法区的常量池中? Q3:GC不会对栈进行操作,那为什么选GC Root的时候还要考虑栈上的变量? Q4:OopMap在运行中会改变吗? Q5:对于一个具体的垃圾回收器,其管理的内存有大小限制吗? 比如,G1只能管理20G内存等(例子,数字是瞎写的)。
    2023-09-18归属地:北京
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部