`
Ydoing
  • 浏览: 106189 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JVM垃圾回收算法和垃圾收集器笔记

 
阅读更多

概述

程序计数器,本地方法栈,虚拟机栈随线程而生,随线程而灭. Java堆和方法区则不一样,这部分内存分配和回收的都是动态的,垃圾收集器所关注的是这部分内存.

判断对象是否是垃圾的算法

JVM没有选用引用计数算法来管理内存,最主要的是引用计数很难解决对象之间相互循环引用的问题.JVM采用了可达性分析算法来判断对象是否能回收.用GC Roots对象作为起点,向下搜索,搜索走过的路劲称为引用链(reference chain),当对一个对象到GC Roots没有任何引用链时,则证明对象不可用的.

判定对象死亡

判定一个对象是否死亡,至少要经历2次标记.如果GC时,经过可达行分析对象不可用,将标记第一次并且进行第一次筛选,筛选条件是对象的finaliz()方法被覆盖且没有执行过.然后放入F-Queue队列中.第二次标记是对F-Queue队列,看对象是否在finalize()方法中拯救自己,否则进行回收.任何对象的finalize()方法都只会被系统自动调用一次,强烈不推荐使用finalize()方法.

垃圾回收算法

  • 标记-清除算法

最基础的算法,其它算法是对它的完善和补充

  • 复制算法

现在虚拟机都采用这种收集算法来回收新生代.

  • 标记-整理算法

也可称标记-压缩算法.回收老年代采用了这种算法.

HotSpot的算法实现

  • 枚举根节点

  • 安全点停顿GC

  • 安全区域GC

垃圾收集器

Serial收集器

Serial垃圾收集器是最基本,历史最悠久的收集器.

单线程GC,回收时”Stop the world”.采用复制算法.

对于运行Client模式下的虚拟机来说是一个不错的选择.

Serial Old收集器

Serial Old收集器是Serial的老年代版本.采用标记-整理算法.

ParNew收集器

ParNew收集器是Serial垃圾收集器的多线程版本。

Parallel Scavenge收集器

Parallel Scavenge收集器是新生代收集器,它采用复制算法收集,又是并行的多线程收集器.

Parallel Scavenge收集器最主要目的是达到一个可控制的吞吐量.吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和”标记-整理”算法.

CMS收集器

CMS(Concurrent Mark Sweep)收集器是以一种获取最短回收停顿时间为目标的收集器.

4个步骤

  • 初始标记(Stop the world)

  • 并发标记

  • 重新标记(Stop the world)

  • 并发清除

G1收集器

并行和并发,分代收集,空间整合,可预测停顿

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    JVM历史发展和内存回收笔记

    Java虚拟机(JVM)是Java程序运行的基础,它的...开发者应根据应用的需求选择合适的JVM版本和垃圾回收策略,以实现最佳的系统性能。通过持续学习和实践,开发者可以更好地掌握JVM的奥秘,提升软件开发和维护的质量。

    jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制)

    Java虚拟机(JVM)是Java程序的核心组成部分,它负责执行字节码并管理内存。在JVM的学习中,理解其内存模型...在实际开发中,理解JVM的工作原理对于解决内存问题、选择合适的垃圾收集器和调整内存配置都具有重要意义。

    马士兵jvm调优笔记.docx

    #### 四、JVM的垃圾回收集器 不同的垃圾回收集器针对不同的应用场景进行了优化: - **Serial Collector**:单线程的垃圾回收器,适合于单核处理器的环境。 - **Parallel Collector**:多线程的垃圾回收器,适用于...

    JVM笔记(阳哥).zip

    JVM的垃圾收集机制负责自动回收不再使用的对象所占用的内存,主要有标记-清除、复制、标记-整理和分代收集等算法。理解垃圾收集的工作原理,可以帮助我们设置合理的内存参数,避免Full GC的发生,提高应用的响应速度...

    jvm学习笔记.zip

    《深入理解JVM:垃圾回收与优化》 ...总的来说,理解JVM的内存管理和垃圾回收机制是提升Java应用性能的关键。开发者需要不断学习和实践,才能在实际项目中有效地配置和优化JVM,确保程序的高效稳定运行。

    JVM工作原理学习笔记

    此外,JVM还提供了垃圾收集器,如Serial、Parallel、CMS和G1等,它们有不同的性能特性和适用场景。 JVM的性能优化主要关注以下几个方面:内存调优,如调整堆大小、新生代与老年代的比例;类加载优化,避免类的频繁...

    垃圾回收机制学习笔记

    通过对Java堆和方法区的理解,结合不同的垃圾回收算法和垃圾回收器的选择,开发者可以更加灵活地调整和优化程序的运行性能。随着技术的发展,未来垃圾回收机制还将不断改进和完善,以适应更加复杂多变的应用需求。

    java垃圾回收器代码举例

    本篇文章将通过代码示例和个人笔记来深入探讨Java垃圾回收器的工作原理及其应用。 1. **Java内存模型** - Java内存分为堆内存(Heap)和栈内存(Stack)。堆内存主要存储对象实例,而栈内存则存储方法调用时的局部...

    Java学习笔记_垃圾回收

    2. 垃圾回收器:Java虚拟机(JVM)包含一个或多个垃圾回收器,它们负责监测和回收不再使用的对象所占的内存。 二、垃圾回收的工作原理 1. 引用计数法:早期的垃圾收集算法,通过计算对象的引用次数来判断是否需要...

    ImagesForJVM-JVM笔记图片

    3. **垃圾收集**:JVM自动管理内存,通过垃圾收集器(Garbage Collector)回收不再使用的对象,防止内存泄漏。常见的垃圾收集算法有标记-清除、复制、标记-整理和分代收集等。 4. **运行时数据区**:JVM内存可以...

    jVM学习笔记.ppt

    JVM的学习可以从其基本结构、代码编译和执行过程,以及内存管理和垃圾回收机制三个方面进行深入探讨。 首先,JVM的基本结构分为逻辑结构和物理结构。逻辑结构主要包括Java源码编译器、JVM执行引擎、类加载器等组件...

    狂神说JVM探究.rar

    这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键知识点的详细解析: 1. **JVM概述**: - JVM是Java平台的核心组成部分,它是一个运行Java字节...

    JVM学习笔记

    #### 垃圾回收算法 - **标记清除法**:标记不再使用的对象,然后进行清理。这种方法可能会导致内存碎片化问题。 - **复制算法**:将内存分成相等的两块,每次只使用其中一块,在垃圾回收时,将活着的对象复制到另一...

    笔记,2、垃圾回收器和内存分配策略1

    《垃圾回收器与内存分配策略详解》 ...开发者应掌握不同的引用类型,选择合适的垃圾回收算法,并了解JVM的分代收集机制,以优化内存管理和降低系统开销。同时,关注GC的并行与并发特性,以平衡回收效率和应用响应时间。

    学习jvm笔记.zip

    1. 参数调优:通过调整JVM启动参数,如-Xms、-Xmx设定堆大小,-XX:+UseConcMarkSweepGC选择垃圾收集器等,来优化JVM性能。 2. 编程实践:减少对象创建,避免大量短生命周期的对象,使用StringBuilder代替String拼接...

    《JVM从入门到入魔》笔记.pdf

    2:垃圾回收:垃圾确定【引用计数法、可达性分析】+垃圾收集算法【标记-清除、标记整理、复制】+垃圾收集器【Serial+PareNew+Serial Old+Paralles Old+CMS+G1】 3:JVM内存调优:JVM参数【标准参数、-X参数、-XX参数等...

    JVM 学习笔记(Java虚拟机)

    - 垃圾收集器:如Serial、ParNew、Parallel Scavenge、CMS、G1等,用于自动回收不再使用的对象所占用的内存。 - 垃圾收集算法:标记-清除、复制、标记-整理和分代收集。 - 内存晋升策略:对象在新生代经过多次 ...

    笔记,2、垃圾回收器和内存分配策略3

    《垃圾回收器与内存分配策略详解》 ...总之,理解垃圾回收器和内存分配策略对于提升Java应用的性能至关重要。开发者应根据应用的特性选择合适的GC策略,并关注GC行为对程序的影响,以实现更高效、更稳定的内存管理。

    JVM内存空间分配笔记

    - 分析垃圾收集器的行为。 - 避免不必要的对象创建。 - 优化算法和数据结构。 #### 九、类的封装与继承 类的设计在Java开发中至关重要。良好的封装不仅可以提升代码的安全性,还可以提高代码的可维护性和可扩展...

    JVM的学习笔记PDF版

    4. **垃圾收集**:JVM的垃圾收集器自动回收不再使用的对象,释放内存。常见的垃圾收集算法有标记-清除、复制、标记-整理和分代收集。新生代和老年代的概念用于区分对象的生命周期,不同的垃圾收集器如Serial、...

Global site tag (gtag.js) - Google Analytics