一. 🦁 前言
Java的垃圾回收机制是自动的,不需要程序员手动进行内存管理。当Java应用程序创建对象时,它们存储在堆内存中。当对象不再被引用时,垃圾回收器会自动标记这些对象为垃圾,并将它们从堆内存中清除,释放空间。
二. 🦁 如何判断一个对象是垃圾
Ⅰ. 引用计数法
如果要操作对象,必须通过引用来进行。如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到。那么这个对象就成为可被回收的对象了。这种方式实现简单,效率较高,但是它无法解决循环引用的问题,因此在 Java 中并没有采用这种方式(Python 采用的是引用计数法)
Ⅱ. 可达性分析
以一个 GC Root 对象作为起点进行搜索,如果在 GC Roots 和对象之间没有可达路径,则称该对象是不可达的。
Ⅲ. GC ROOT 对象
- 栈帧中的本地变量表中引用的对象。
- 方法区中静态属性引用的对象。
- 方法区中常量引用的对象。
- 本地方法栈中引用的对象。
三. 🦁 垃圾回收算法
Ⅰ. 标记——清除算法
效率较低,有空间碎片。Old 区使用的算法
Ⅱ. 复制算法
空间碎片少,但会浪费空间。存活对象较少才会使用的算法。young区使用的算法
Ⅲ. 标记——整理算法:
空间碎片少,效率较低。Old 区使用的算法
四. 🦁 垃圾收集器的评判标准
垃圾收集器是对垃圾回收算法的实现,JVM 中提供了很多垃圾收集器,我们如何评判一个垃圾收集器的好坏呢?
- 垃圾收集器的执行效率 = 吞吐量 / 停顿时间
- 吞吐量 = 用户代码执行时间/(用户代码执行时间+停顿时间)
五. 🦁 垃圾收集器的类型
Ⅰ. 串行收集器
只有一个垃圾回收线程,在垃圾回收时暂停用户代码线程,如 Serial 和 Serial Old收集器。
Ⅱ. 并行收集器
吞吐量优先,多个垃圾收集器线程共同工作, 尽快完成垃圾收集。如 ParNew,Parallel Scanvenge, Parallel Old 收集器。
Ⅲ. 并发收集器
停顿时间优先,用户线程和垃圾回收线程一同工作,用户代码线程也会完全停止一小段时间,如 CMS,G1 收集器
六. 🦁 CMS 收集器
CMS(concurrent mark sweep,并发标记扫描)收集器是并发收集器,是基于标记 ——清理的算法进行垃圾回收,用于 OldGC。
- 优点:并发收集、低停顿
- 缺点:会产生大量空间碎片,停顿时间虽然短但是不可控。
问:CMS 收集器为什么不进行并发的初始标记?
因为初始标记速度很快,不值得多开线程,开线程也是需要耗费资源的。
七. 🦁 G1 收集器
- G1(garbage first,垃圾优先)收集器是并发收集器,从 JDK1.7 开始支持,能进行OldGC 和 YoungGC。Old 区采用标记整理算法,Young 区采用复制算法。
- G1 收集器没有固定的 Old、Young、Eden、Survivor 区,而是将内存分为一个个大小相等的 Region(格子,1Mb~32Mb)。每次垃圾回收后,Region 的用途可以发生改变,提高了内存的灵活性和利用率。
G1 收集器可以根据开发者设置的参数,停顿时间的期望值,优先筛选回收存活的对象比较少,垃圾对象比较大的区域 Region,可以把更多空余的空间释放出来。
八. 🦁 如何选择垃圾收集器?
- 优先让服务器自己来选择
- 如果内存小于 100M,使用串行收集器
- 如果服务器是单核,并且没有停顿时间要求,使用串行收集器
- 如果允许停顿时间超过 1 秒,选择并行收集器
- 如果停顿时间不能超过 1 秒,使用并发收集器
九. 🦁 Happy Ending
🦁 送书抽奖活动 🦁
- 系统:全书内容层层递进,深入浅出,手把手教你吃透JVM虚拟机核心技术
- 深入:剖析探索JVM核心底层原理,强化推动JVM优化落地
- 实战:原理与实践相结合,懂理论,能落地,实战化案例精准定位技术细节
- 资源:附赠全书案例源代码,知其然更知其所以然,快速上手不用愁
本书主要以 Java 虚拟机的基本特性及运行原理为中心,深入浅出地分析 JVM 的组成结构和底层实现,介绍了很多性能调优的方案和工具的使用方法。最后还扩展介绍了 JMM 内存模型的实现原理和 Java 编译器的优化机制,让读者不仅可以学习 JVM 的核心技术知识,还能夯实 JVM 调优及代码优化的技术功底。
本书适合已具有一定 Java 编程基础的开发人员、项目经理、架构师及性能调优工程师参考阅读,同时,本书还可以作为广大职业院校、计算机培训班相关专业的教学参考用书。文章来源:https://www.toymoban.com/news/detail-549762.html
本次活动赠书2本,评论区抽取2位小伙伴送书
活动时间: 截止到2023-07-15 20: 00 参与方式: 点赞、收藏本文章,并任意评论(不折叠就行) 抽奖时间: 2023.07.15 公布时间: 2023.7.15 通知方式:交流群内公布或私信通知
更多活动可继续关注上方🦁的博客,好运总会轮到你!!!文章来源地址https://www.toymoban.com/news/detail-549762.html
到了这里,关于【JVM】| 垃圾回收机制 | 文末送书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!