【JVM】| 垃圾回收机制 | 文末送书

这篇具有很好参考价值的文章主要介绍了【JVM】| 垃圾回收机制 | 文末送书。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 🦁 前言

Java的垃圾回收机制是自动的,不需要程序员手动进行内存管理。当Java应用程序创建对象时,它们存储在堆内存中。当对象不再被引用时,垃圾回收器会自动标记这些对象为垃圾,并将它们从堆内存中清除,释放空间。

二. 🦁 如何判断一个对象是垃圾

Ⅰ. 引用计数法

如果要操作对象,必须通过引用来进行。如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到。那么这个对象就成为可被回收的对象了。这种方式实现简单,效率较高,但是它无法解决循环引用的问题,因此在 Java 中并没有采用这种方式(Python 采用的是引用计数法)

Ⅱ. 可达性分析

以一个 GC Root 对象作为起点进行搜索,如果在 GC Roots 和对象之间没有可达路径,则称该对象是不可达的。

Ⅲ. GC ROOT 对象

  • 栈帧中的本地变量表中引用的对象。
  • 方法区中静态属性引用的对象。
  • 方法区中常量引用的对象。
  • 本地方法栈中引用的对象。

三. 🦁 垃圾回收算法

Ⅰ. 标记——清除算法

效率较低,有空间碎片。Old 区使用的算法

【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

Ⅱ. 复制算法

空间碎片少,但会浪费空间。存活对象较少才会使用的算法。young区使用的算法

【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

Ⅲ. 标记——整理算法:

空间碎片少,效率较低。Old 区使用的算法

【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

四. 🦁 垃圾收集器的评判标准

垃圾收集器是对垃圾回收算法的实现,JVM 中提供了很多垃圾收集器,我们如何评判一个垃圾收集器的好坏呢?

  • 垃圾收集器的执行效率 = 吞吐量 / 停顿时间
  • 吞吐量 = 用户代码执行时间/(用户代码执行时间+停顿时间)

五. 🦁 垃圾收集器的类型

Ⅰ. 串行收集器

只有一个垃圾回收线程,在垃圾回收时暂停用户代码线程,如 Serial 和 Serial Old收集器。
【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

Ⅱ. 并行收集器

吞吐量优先,多个垃圾收集器线程共同工作, 尽快完成垃圾收集。如 ParNew,Parallel Scanvenge, Parallel Old 收集器。
【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

Ⅲ. 并发收集器

停顿时间优先,用户线程和垃圾回收线程一同工作,用户代码线程也会完全停止一小段时间,如 CMS,G1 收集器
【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

六. 🦁 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 的用途可以发生改变,提高了内存的灵活性和利用率。
【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

G1 收集器可以根据开发者设置的参数,停顿时间的期望值,优先筛选回收存活的对象比较少,垃圾对象比较大的区域 Region,可以把更多空余的空间释放出来。
【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言

八. 🦁 如何选择垃圾收集器?

  • 优先让服务器自己来选择
  • 如果内存小于 100M,使用串行收集器
  • 如果服务器是单核,并且没有停顿时间要求,使用串行收集器
  • 如果允许停顿时间超过 1 秒,选择并行收集器
  • 如果停顿时间不能超过 1 秒,使用并发收集器

九. 🦁 Happy Ending

【JVM】| 垃圾回收机制 | 文末送书,基础知识查漏,jvm,java,开发语言


🦁 送书抽奖活动 🦁

《深入浅出Java虚拟机:JVM原理与实战》
Java虚拟机核心技术一本通:通过实战案例+执行效果图+核心代码,剖析探索JVM核心底层原理,强化推动JVM优化落地,手把手教你吃透Java虚拟机深层原理!
  • 系统:全书内容层层递进,深入浅出,手把手教你吃透JVM虚拟机核心技术
  • 深入:剖析探索JVM核心底层原理,强化推动JVM优化落地
  • 实战:原理与实践相结合,懂理论,能落地,实战化案例精准定位技术细节
  • 资源:附赠全书案例源代码,知其然更知其所以然,快速上手不用愁

本书主要以 Java 虚拟机的基本特性及运行原理为中心,深入浅出地分析 JVM 的组成结构和底层实现,介绍了很多性能调优的方案和工具的使用方法。最后还扩展介绍了 JMM 内存模型的实现原理和 Java 编译器的优化机制,让读者不仅可以学习 JVM 的核心技术知识,还能夯实 JVM 调优及代码优化的技术功底。
本书适合已具有一定 Java 编程基础的开发人员、项目经理、架构师及性能调优工程师参考阅读,同时,本书还可以作为广大职业院校、计算机培训班相关专业的教学参考用书。

本次活动赠书2本,评论区抽取2位小伙伴送书

活动时间: 截止到2023-07-15 20: 00
参与方式: 点赞、收藏本文章,并任意评论(不折叠就行)
抽奖时间: 2023.07.15
公布时间: 2023.7.15
通知方式:交流群内公布或私信通知

更多活动可继续关注上方🦁的博客,好运总会轮到你!!!文章来源地址https://www.toymoban.com/news/detail-549762.html

到了这里,关于【JVM】| 垃圾回收机制 | 文末送书的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM及垃圾回收机制

    类加载器负责将.class文件加载到JVM中。主要分为三种层次:Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。它们按层次关系加载类,保证类的隔离性和重用性。 运行时数据区包括方法区、堆、栈、本地方法栈和程序计数器。堆用于存放对象实例,方法区保存类信息和

    2024年02月12日
    浏览(34)
  • 【JVM】垃圾回收机制

     哈喽,哈喽,大家好~ 我是你们的老朋友: 保护小周ღ    今天给大家带来的是  JVM (Java 虚拟机) 的垃圾回收机制,回收是指回收什么?  如何确定要回收的内存: 引用计数,可达性分析,如何释放空间 : 标记清除,复制算法,标记整理,分代回收 ,一起来看看叭~ 本期

    2024年02月09日
    浏览(33)
  • 【JavaScript】JavaScript基础详解(文末送书)

    👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 在 JavaScript 中,可以使用三种方式来声明

    2024年02月08日
    浏览(43)
  • JVM:垃圾回收机制(GC)

    引用计数算法:         在对象中添加一个引用计数器,当每有一个地方引用它时,计数器值加一。当引用失效时,计数器值就减一。当一个对象的计数器为零时,表示该对象没有被任何其他对象引用,因此可以被释放。 优点 :是可以及时回收垃圾对象,避免内存泄漏,且

    2024年01月19日
    浏览(36)
  • JVM中的垃圾回收机制

    java相较于c、c++语言的优势之一是自带垃圾回收器,垃圾回收是指 不定时 去堆内存中清理 不可达 对象。不可达的对象并不会 马上 就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,程序员唯一能做的就是通过调用System.gc 方法来建议执行垃圾收集

    2024年02月16日
    浏览(40)
  • 【JVM】垃圾回收机制详解(GC)

    可以看jvm详解之后,再来理解这篇文章更好 堆和方法区,主要发生在堆中,然后主要发生在堆的伊甸园区(Eden)。 Java中的垃圾回收是根据 可达性分析算法(Reachability Analysis) 和 引用计数算法 来判断对象是否存活的。 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:

    2024年02月13日
    浏览(44)
  • JVM G1垃圾回收机制介绍

    G1(Garbage First)收集器 (标记-整理算法): Java堆并行收集器,G1收集器是JDK1.7提供的一个新收集器,G1收集器基于“标记-整理”算法实现,也就是说不会产生内存碎片。此外,G1收集器不同于之前的收集器的一个重要特点是:G1回收的范围是整个Java堆(包括新生代,老年代),而其

    2024年02月13日
    浏览(24)
  • 深入学习JVM —— GC垃圾回收机制

            前面荔枝已经梳理了有关JVM的体系结构和类加载机制,也详细地介绍了JVM在类加载时的双亲委派模型,而在这篇文章中荔枝将会比较详细地梳理有关JVM学习的另一大重点——GC垃圾回收机制的相关知识,重点了解的比如对象可达性的判断、四种回收算法、分代回收

    2024年02月14日
    浏览(36)
  • JVM学习 GC垃圾回收机制 (堆内存结构、GC分类、四大垃圾回收算法)

    🤖 作者简介: 努力的clz ,一个努力编程的菜鸟 🐣🐤🐥   👀 文章专栏: 《JVM 学习笔记》 ,本专栏会专门记录博主在学习 JVM 中学习的知识点,以及遇到的问题。   🙉 文章详情: 本篇博客是学习 【狂神说Java】JVM快速入门篇 的学习笔记,关于 GC垃圾回收机制 (堆内存结

    2023年04月19日
    浏览(31)
  • 【JVM】JVM执行流程 && JVM类加载 && 垃圾回收机制等

    目录 🌷1、JVM是什么? 🌷2、JVM的执行流程(能够描述数据区5部分) 🌷3、JVM类加载过程 🌷4、双亲委派机制:描述类加载的过程 问题1:类加载器 问题2:什么是双亲委派模型?  问题3:双亲委派模型的优点 🌷5、垃圾回收机制(重要,针对的是堆)    问题1:判定对象

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包