《深入理解Java虚拟机》学习笔记(2)--垃圾收集器

《深入理解Java虚拟机》(第3版) 学习笔记,涵盖全书精髓 说是每位Javaer必看的一本书不过分吧 阅读详情
一、Jvm垃圾回收区域
程序计数器、虚拟机栈、本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本是在类结构确定下来时就已知的,因此这三个区域的内存分配和回收都具有确定性,在这三个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟着回收了。而java堆和方法区不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也不一样,我们只有在程序运行时才能知道会创建哪些对象,这部分内存的分配和回收是动态的,垃圾收集器所关注的是这部分内存。
二、垃圾回收的判定方法
怎么判断哪些对象是已经“死去”的对象呢?也就是说怎么判定一个对象是否需要回收呢?
1.引用计数数
在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。存在循环引用的问题。Java语言并没有选用引用计数器算法来管理内存。
2.可达性分析算法(引用链算法)
通过一系列的名为“GC Root”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说就是从GC Roots到这个对象不可达)时,则证明此对象是不可引用的,所以它们将会被判定为可回收对象。
在Java语言中可作为GC Roots的对象包括下面几种:
  • 虚拟机栈(栈帧中的本地变量表)中的引用的对象;
  • 方法区中的类静态属性引用的对象;
  • 运行时常量池中的对象引用;
  • 方法区中的常量引用的对象;
  • 本地方法栈中JNI(即一般所说的native方法)引用的对象。
三、Java中的四种引用类型
  • 强引用:程序中普遍存在的,类似“String s=”hello wold””这类的引用,强引用的对象不会被回收。
  • 软件用:有用但是非必需的对象,在系统将要发生内存溢出之前会对软引用的对象进行垃圾回收,用SoftReference类实现软引用。
  • 弱引用:非必需的对象,被弱引用关联的对象只能存活到下一次垃圾收集发生之前。当垃圾回收器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。用WeakReference类来实现弱引用。
  • 虚引用:最弱的引用关系,不能通过虚引用取得对象的实例,为对象设置虚引用的唯一目的就是在这个对象被收集器回收时收到一个系统通知。用PhantomReference类来实现虚引用。
四种引用强度依次逐渐减弱。
四、方法区的回收
永久代(方法区)的垃圾收集主要回收两部分内容:废弃常量和无用的类。回收废弃常量与回收Java堆中的对象非常相似。以常量池中的字面量的回收为例,假如一个字符串“abc”已经进入了常量池中,但是当前系统没有任何一个String对象叫做“abc”的,也没有其他地方引用了这个字面量,如果这个时候发生内存回收,而且必要的话,这个“abc”常量就会被系统清理出常量池。常量池中的其他类(接口)、方法、字段的符号引用也与此类似。
判断一个类是否是“无用的类”需要同时满足下面三个条件:
  • 该类所有的实例都已经被回收,即Java堆中不存在该类的任何实例;
  • 加载该类的ClassLoader已经被回收;
  • 该类对应的java.lang.Class对象没有在任何对方被引用,无法在任何地方通过反射访问该类的方法。
五、垃圾对象回收的过程
1.对象是否与GC Roots有引用链?有的话则存活,不需要回收;没有的话说明是个需要回收的垃圾对象,进入步骤2;
2.是否需要执行对象的finalize()方法。当对象覆盖了finalize()方法、且finalize()方法还没有被虚拟机调用过,则需要执行,转步骤3处理;否则说明没有必要执行finalize()方法,回收之;
3.将对象放入一个F-Queue队列中,虚拟机会有一个低优先级的线程去执行对象的finalize()方法;
4.若对象在finalize()中拯救了自己----重新与GC Roots建立引用链,则存活;否则回收之。
finalize()方法只会被系统自动调用一次,是对象避免自己被回收的最后一次机会。
六、垃圾收集算法
1.标记-清除算法(Mark-Sweep)
首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象。
优点:简单,是后面其他算法的基础
缺点:标记和清除的效率很低;标记清除之后会产生大量不连续的内存碎片,空间碎片太多会导致以后遇到大对象的时候无法找到足够的内存而不得不提前触发另一次垃圾收集动作。
2.复制算法
将可用内存分为两个区域,每次只使用其中一块,当使用的那一块内存用完时,将还存活的对象复制到另外一块内存中,然后把已使用过的内存空间一次清理掉。
优点:不会产生内存碎片,实现简单,运行高效。
缺点:将内存缩小为两块,内存使用率不高,而且可能会需要额外的担保空间。如果对象存活率较高时就要进行较多的复制,导致效率变低。
3.标记-整理算法(Mark-Compact)
首先标记出所有需要回收的对象,然后将所有存活的对象向一端移动,最后清理掉边界以外的内存。
优点:不会产生空间碎片,比复制算法提高了内存空间利用率。
4.分代收集算法
  • 当前商用虚拟机都采用了这种算法,根据对象的存活周期将内存划分为几块,一般是把Java堆分为新生代和老生代,根据各个年代采用适当的收集算法;
  • 新生代一般采用复制算法,老年代一搬采用标记-清理或者标记-整理进行回收;
  • 新生代中由于每次存活的对象少(新生代中约98%的对象是“朝生夕死”的),每次垃圾收集时都会发现只有少量对象存活,因此适用复制算法,只需付出少量存活对象的复制成本就可以完成收集;
  • 老年代中因为对象存活率高、没有额外空间提供分配担保,因此适用标记-清除算法或标记-整理算法。
七、HotSpot的算法实现
1.枚举根节点
  • 可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表),现在很多应用仅方法区就有数百兆,如果要逐个检查这里面的引用,那么必然会消耗大量时间。
  • 枚举根节点时必须停顿所有java执行线程(即Stop The World)。
  • HotSpot使用一组称为OopMap的数据结构来记录哪些地方存着对象的引用,因此枚举根节点时并不需要遍历执行上下文和全局的引用位置,可以快速且准确地完成GC Roots枚举。
2.安全点
  • 程序执行时并非在所有地方都能停顿下来开始GC,只有在到达安全点时才能暂停;
  • 让Java线程运行到安全点时停顿下来有两种方案:抢先式中断和主动式中断;
  • 主动式中断的思想是当GC需要中断线程时不直接对线程进行操作,仅仅简单的设置一个标志,各个线程执行时主动去轮询这个标志,发现中断标志为真时就自己中断挂起
3.安全区域
  • 为了处理“不执行”的程序的安全点问题,提出了安全区域来解决问题;
  • 安全区域是指在一段代码片段之中,引用关系不会发生变化,在这个区域内的任何地方进行GC都是安全的。
4.垃圾收集器
(1)Serial收集器/Serial Old收集器
  • 两者都是单线程的,他在进行垃圾收集时必须暂停其他的所有线程,直到收集结束;
  • Serial收集器用于新生代,采用复制算法;Serial Old收集器用于老年代,采用标记-整理算法;
  • Serial/Serial Old收集器是虚拟机运行在Client模式下默认的新生代/老年代收集器
  • 对于单个CPU坏境来说,由于没有线程交互的开销,专心做垃圾收集,可以获得很高的单线程收集效率
  • Serial Old收集器作为年老代中使用CMS收集器的后备垃圾收集方案。
新生生采用Serial、老年代采用Serial Old收集器示意图:
(2)ParNew收集器
ParNew收集器用于新生代,是Serial收集器的多线程版本,使用多条线程进行垃圾收集,是运行在Server模式下虚拟机中首选的新生代收集器。
新生代ParNew与年老代Serial Old搭配垃圾收集过程图:
(3)Parallel Scavenge收集器
  • Parallel Scavenge收集器是一个新生代收集器,采用复制算法。
  • Parallel Scavenge收集器的特点是他的关注点与其他收集器不同。其他收集器的目标是尽可能的缩短用户线程的停顿时间,而Parallel Scavenge收集器的目标是达到一个可控的吞吐量,因此也经常被称为“吞吐量优先”收集器。
  • 高吞吐量可以高效的利用CPU时间,尽快得完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。
  • GC停顿时间的缩短是以牺牲吞吐量和新生代空间来换取的;
(5)Parallel Old收集器
  • Parallel Old收集器是Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法;
  • 在注重吞吐量和CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器
新生代采用Parallel Scavenge收集器与老年代采用Parallel Old收集器搭配垃圾收集过程图:
(6)CMS收集器
  • CMS(Concurrent Mark Sweep)收集器是一种年老代垃圾收集器,其最主要目标是获取最短垃圾回收停顿时间,最短的垃圾收集停顿时间可以为交互比较高的程序提高用户体验;
  • 和其他年老代使用标记-整理算法不同,它使用多线程的标记-清除算法,分为四个步骤:初始标记、并发标记、重新标记、并发清除。
a.初始标记:只是标记一下GC Roots能直接关联的对象,速度很快,仍然需要暂停所有的工作线程。
b.并发标记:进行GC Roots跟踪的过程,和用户线程一起工作,不需要暂停工作线程。
c.重新标记:为了修正在并发标记期间,因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,仍然需要暂停所有的工作线程。
d.并发清除:清除GC Roots不可达对象,和用户线程一起工作,不需要暂停工作线程。
由于耗时最长的并发标记和并发清除过程中,垃圾收集线程可以和用户现在一起并发工作,所以总体上来看CMS收集器的内存回收和用户线程是一起并发地执行。
CMS收集器工作过程:
CMS的缺点:
  • CMS收集器对CPU资源非常敏感。在用户程序本来CPU负荷已经比较高的情况下,如果还要分出CPU资源用来运行垃圾收集器线程,会使得CPU负载加重。
  • CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full FC的产生。由于CMS收集器和用户线程并发运行,因此在收集过程中不断有新的垃圾产生,这些垃圾出现在标记过程之后,CMS无法在本次收集中处理掉它们,只好等待下一次GC时再将其清理掉,这些垃圾就称为浮动垃圾。
  • 由于CMS收集器采用了标记-清除算法,所以在回收结束时会有大量空间碎片产生,碎片过多时,在给大对象分配内存时会有很大麻烦,有时不得不提前触发一次Full GC。因此,CMS收集器提供-XX:+UseCMSCompactAtFullColloction开关参数(默认开启),用于在顶不住要进行Full GC时开启内存碎片的合并整理过程。还可以设置每执行多少次不压缩的Full GC后,跟着来一次带压缩的。
(7)G1收集器
  • G1收集器是一款面向服务端应用的垃圾收集器
  • G1收集器具备以下特点:
并行与并发
分代收集
空间整合:从整体上来看是基于“标记-整理”算法实现的,在局部上是基于复制算法实现的,因此不会产生内存碎片。
可预测的停顿:可以非常精确控制停顿时间,在不牺牲吞吐量前提下,实现低停顿垃圾回收。
  • G1收集器将整个Java堆划分为多个大小相等的独立区域,虽然还保留有新生代和老生代的概念,但新生代和老生代不再是物理隔的了,他们是一部分Region的集合
  • G1收集器避免全区域垃圾收集,它把堆内存划分为大小固定的几个独立区域,并且跟踪这些区域的垃圾收集进度,同时在后台维护一个优先级列表,每次根据所允许的收集时间,优先回收垃圾最多的区域。
  • 在G1收集器中,使用Remembered Set来避免全堆扫描




深入理解Java虚拟机4(几种垃圾收集器的原理) 垃圾收集器 垃圾收集算法是内存回收的方法论 垃圾收集器就是内存回收的具体实现 Serial收集器 Serial收集器是最基本、发展历史最悠久的收集器,曾经是虚拟机新生代收集的唯一选择 这个收集器是一个单线程收集器,但它的单线程的意义并不仅仅说明它只会使用一个CPU或一条收集线程区完成垃圾收集工作,更重要的是在于它进行垃圾收集时,必须暂停其它所有工作线程,直到它收集结束 使用复制算法 “Stop The World”这项工作实际上是由虚拟机在后台自动发起和自动完成的。在用户不可见的情况把用户正常工作的线程 阅读详情

相关推荐

Veeam Backup Replication Console 13 备份 PVE

本文介绍了如何通过Veeam Backup & Replication控制台配置与Proxmox VE(PVE)服务器的连接,包括主机地址、用户名密码和SSH信任设置。随后详细说明了部署备份Worker虚拟机的步骤,涵盖网络配置和VM创建。接着指导用户创建PVE虚拟机备份任务,包括命名、选择备份对象、存储位置、备份类型设置,以及配置备份计划任务。最后描述了备份测试执行过程,从启动备份到完成状态通知的完整流程。整个操作涉及服务器连接、Worker部署、备份配置和任务执行四个主要环节。

极致,细节 1604

《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器

Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下: 图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。 (1).Serial垃圾收集器: Serial是最基本、历

Tony Chen的专栏 1万+

InsightFace实战:如何在树莓派上部署轻量级人脸识别系统(附完整代码)

本文详细介绍了如何在树莓派上部署基于InsightFace框架的轻量级人脸识别系统。通过硬件选型、环境配置、模型优化(如MobileFaceNet)及完整代码实战,指导开发者构建本地化、低功耗的智能应用,如智能门铃,并提供了性能调优与系统服务化的进阶技巧。

weixin_29043895的博客 351

读《深入理解Java虚拟机》笔记(四)垃圾收集器

Serial收集器:最基本,发展历史最悠久的收集器。一个单线程的收集器只会使用一个cpu或者一条线程去完成垃圾收集工作更重要的是在进行垃圾收集时,必须暂停所有的工作线程,直到它收集结束。依然是虚拟机运行在Client模式下的默认新生代器。 ParNew收集器:除了多线程收集之外,和Serial收集器没有多大区别,是许多运行在Server模式下的虚拟机中首选的新生代收集器,只有它和Serial...

MineCodelife的博客 293

避开这些坑!医疗影像数据增强的6个安全操作指南(附PyTorch代码)

本文详细介绍了医疗影像数据增强的六大安全准则,包括解剖结构守恒、密度值物理意义保留和病灶特征保护等关键原则,并提供了PyTorch实战代码。通过具体案例和参数建议,帮助开发者在肺结节检测和MRI分割等医疗AI应用中实现安全有效的数据增强,避免因不当操作导致的诊断误差。

cola5的博客 555

模拟调制系统实战:从AM到FM的5种调制方式对比与选型指南

本文深度解析AM、DSB、SSB、VSB、FM五种经典模拟调制方式,从实现电路、频谱效率、抗噪性能及工程成本等维度进行实战对比。通过MATLAB/Simulink仿真案例,提供清晰的选型决策框架,帮助工程师在无人机图传、短波通信、广播系统等具体项目中,根据带宽、功耗和抗干扰需求选择最优方案。

study的专栏 932

《深入理解Java虚拟机》学习笔记之垃圾收集器与内存分配策略

一、概述 GC(Garbage Collection)需要完成的三件事 (1)哪些内存需要回收 (2)什么时候回收 (3)如何回收 GC主要面向Java堆和方法区中的内存 原因:这部份内存的分配和回收都是动态的 只有在程序处于运行期间时才能知道会创建哪些对象 程序计数器、虚拟机栈、本地方法栈三个区域随线程而生、随线程而灭,内存分配和回收具有确定性 二、对象已死吗(判断对象...

吃了么没吃回家吃点儿 388

【大语言模型 85】IA3与其他PEFT方法对比

在大语言模型时代,参数高效微调(PEFT)技术成为了降低微调成本的关键。本文深入解析IA3(Infused Adapter by Inhibiting and Amplifying Inner Activations)方法,并与LoRA、AdaLoRA、Prefix Tuning等主流PEFT技术进行全面对比,通过理论分析、代码实现和实验验证,帮助读者理解不同PEFT方法的优劣势和适用场景,为实际项目中的技术选型提供科学依据。

熵数实验室 753

深入理解java虚拟机之垃圾收集器-学习笔记2

垃圾收集器 垃圾收集(Garbage Collection, GC)需要完成的3件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 判断对象是否已死 在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用到的对象)。 引用计数算法 给对象添加一个引用计数器,每当有...

weixin_42577190的博客 255

13、数据来源介绍与操作指南

本文详细介绍了多种数据源的特点、操作步骤及适用场景,包括元数据数据源、MongoDB数据源、Pentaho Data Integration数据源、OLAP数据源、Pentaho分析数据源和OLAP4J数据源。通过流程图和表格对比,帮助用户理解不同数据源的选择与使用方法,并提供了实际应用案例和注意事项,旨在提升数据获取与分析效率,支持高效报告生成。

ik678901234的博客 152

CLASSB类移植(满足IEC 60730-1和60355-1标准)

针对软件认证需要满足IEC 60730-1和60335-1标准,ST公司专门提供的软件扩展包X-CUBE-CLASSB,它包含自测库和文档,支持多种STM32系列芯片,通过预集成测试库和标准化流程,帮助开发者快速满足国际安全标准,适用于家电、工业控制等高可靠性场景。ClassB软件包程序检测内容分为两个主要部分:启动时的自检和运行时的周期自检,MCU在上电的时候会进行复位启动,在启动完成以后会进行运行自检。

m0_61973119的博客 1402

深入理解Java虚拟机

作为一名Java程序员,Java虚拟机是我们不必学会就可以搬砖工作的一种技能点,但是小奇为什么还要讲一下呢?难道就是为了浪费大家1分钟的宝贵时间,一个人1分钟,50万人就是1年,5000万人就是100年,赚了,小奇以一己之力成功搞挂一个人(血赚)。当然不是,并且小奇的文章也没有那么多人看,最多也就浪费个肾吧。学习Java虚拟机是因为面试官要问啊!,所以我们就要学,什么?不实用的你不学?那邻居小奇可要使劲学啦,到时候面试官只要小奇不要你。至于你问为什么面试官要问Java虚拟机呢,这个。。。

真正的大师永远怀着一颗学徒的心 1371

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

《深入理解Java虚拟机》学习笔记

本篇是《深入理解Java虚拟机-Java 高级特性与最佳实践》学习笔记,周志明著,Understanding the JVM-Advanced Features and Best Practices,机械工业出版社,2011.6出版。 重温Java JVM知识,重点学习了与日常开发工作相关性最大的“自动化内存管理”模块,对Java容器优化、内存问题解决很有帮助;习惯了从互联网看电子书,难以集中和记忆,现在找几本纸质书重温,可以很清静、很安静的理解和消化,受益匪浅。

Java之旅 8779

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

《趣学编程》深入理解Java虚拟机

《趣学编程》深入理解Java虚拟机

真正的大师永远怀着一颗学徒的心 4067

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深入理解Java虚拟机之垃圾收集器篇

在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的.

2401_86659618的博客 976

深入理解Java虚拟机—垃圾收集器

上一篇:深入理解Java虚拟机——(3) 今天是阅读Jvm的第四天,今天学习了几种垃圾收集器 如果说收集算法是内存回收的方法论,那么垃圾收集器则是内存回收的具体实现,JDK1.7 update14之后的Hotspot虚拟机的所有收集器如下如: 一. Serial 收集器 Serial(串行)收集器是最基本、发展历史最悠久的收集器,它是采用复制算法的新生代收集器,曾经(JDK 1.3.1之前)是虚拟机新生代收集的唯一选择。 它是一个单线程收集器,只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是

haiyanghan的博客 1551

深入理解java虚拟机(五)垃圾收集器

垃圾收集器是垃圾收集算法的具体实现。Java规范对垃圾收集器的实现没有做任何规定,因此不同的虚拟机提供的垃圾收集器可能有很大差异。HotSpot虚拟机1.7版本使用了多种收集器。如下图。

张小琦的博客专栏 3207

《深入理解Java虚拟机》读后笔记-垃圾收集器

文章目录《深入理解Java虚拟机》读后笔记-垃圾收集器1.概述2.Serial收集器3.ParNew收集器4.Parallel Scavenge收集器5.Serial Old收集器6.Parallel Old收集器7.CMS收集器8.Garbage First收集器9.内存分配与回收策略9.1 对象优先在Eden分配9.2 大对象直接进入老年代9.3 长期存活的对象将进入老年代9.4 动态对象年龄判定9.5 空间分配担保 《深入理解Java虚拟机》读后笔记-垃圾收集器 1.概述 如果说收集算法是内存回收的方

小皮皮LL的博客 863

深入理解java虚拟机之垃圾收集器

前言 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同的版本的虚拟机所提供的垃圾收集器都有可能会有很大的区别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。      相关系列博客: 深入理解java虚拟机之java内存区域 深入理解java虚拟机之对象真的死了...

rianple的博客 287

《深入理解Java虚拟机》 垃圾收集器与内存分配策略

垃圾收集的重要性:垃圾收集(Garbage Collection, GC)是Java虚拟机自动内存管理的核心机制,可以自动回收不再使用的内存,避免内存泄漏和内存溢出问题。垃圾收集的目标:最小化停顿时间、最大化吞吐量、最小化内存占用。

vesqis的博客 571

深入理解Java虚拟机—垃圾收集器适用场景

前两天在忙(在玩游戏),所以没更新,今天补上 上一篇:深入理解Java虚拟机——(5) 一. 选择合适的垃圾收集器 1. 简介 Epsilon(A No-Op Garbage Collector)垃圾回收器控制内存分配,但是不执行任何垃圾回收工作。一旦java的堆被耗尽,jvm就直接关闭。设计的目的是提供一个完全消极的GC实现,分配有限的内存分配,最大限度降低消费内存占用量和内存吞吐时的延迟时间。一个好的实现是隔离代码变化,不影响其他GC,最小限度的改变其他的JVM代码。 Performance tes

haiyanghan的博客 287

《深入理解Java虚拟机》十款HotSpot虚拟机的垃圾收集器

文章目录基础引用垃圾收集算法标记-清除算法标记-复制算法标记-整理算法垃圾收集器经典垃圾收集器Serial 收集器ParNew 收集器Parallel Scavenge 收集器Serial Old 收集器Parallel Old 收集器CMS 收集器Garbage First 收集器(G1)低延迟垃圾收集器Shenandoah 收集器ZGC 收集器特殊的垃圾收集器Epsilon 收集器 本文内容是阅读《深入理解Java虚拟机》第三章的学习笔记。 基础 引用 判断对象是否存活和“引用”离不开关系。在JDK1

lena blog 325

深入理解Java虚拟机——垃圾收集器

在学习Java虚拟机时,我们了解了常见的三种垃圾收集算法: 标记-清除(Mark-Sweep)算法、标记-复制算法、标记-整理算法 但是收集算法是内存回收的方法论,而圾收集器就是内存回收的实践者,接下来我们来了解一下常见的垃圾收集器,其中CMS、G1、ZGC垃圾收集器是我们关注的重点,其他的可以一笔带过。 一、Serial收集器 Serial收集器是最基础、历史最悠久的、单线程收集器,Serial收集器在进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。HotSpot虚拟机新生代默认的垃圾收

前尘忆梦Memory的博客 266

《Thinking In Java》 VS 《Effective Java》 VS 《深入理解Java虚拟机》

今天刚考完试,在5天以前的前4个月时间里,我很庆幸自己选了一个看书的学习途径。从上个学期的暑假到现学期的11周里面,读了《Thinking In Java》、《深入理解Java虚拟机》和《Effective Java》,感悟颇多。首先先说明一下,我以前是看视频学习的,就做过两三个学校的网站,都已经上线在使用。没做过什么特别高大上的东西,所以我是处在新手的角度去读书的,我也知道自己的理解很浅,不

小浩子的博客 2万+

《深入理解Java虚拟机》第2版和第3版的区别,看过第2版还有必要买第3版吗?

持续更新中~~ 博主前言 hello,我是oxye~ 在Java届,《深入理解Java虚拟机 JVM高级特性与最佳实践》是一本经典的书籍了,很多程序员都会买一本,但看不看又是另一回事儿了。 我一开始看也是迷迷糊糊的,因为初级程序员更多的是应用语言,不怎么在乎底层,也不想啃基础太深。 随着不断学习,打扎实基础的过程中,丰富了技术储备,看了很多源码,也从初级变成高级了,再回过头看这本书时,就会顺利很多,也会学到很多知识,不仅加深了自己对Java的理解,也帮我解决了不少实际问题,例如jvm参数调整、阅读源码时理解

Oxye 3308
上一篇: 《深入理解java虚拟机》学习笔记(1)--jvm内存区域
下一篇: 《深入理解Java虚拟机》学习笔记(3)--内存分配与回收策略
halfclear
博客等级 码龄10年 32粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值