`

Java垃圾收集之垃圾收集算法

 
阅读更多

几种基本的垃圾收集算法

 

标记-清除算法 

        顾名思义,此方法涉及到两个步骤:标记和清除。首先标记出所有需要回收的对象,在标记完成后统一完成回收。标记的过程在《Java垃圾收集之对象引用》中已经介绍过。此方法是最基础的垃圾收集算法,后续的收集算法均基于此方法改进而得来。

        它的缺点主要有两个,一个是效率问题,标记和清理的过程执行效率都不高;第二是清理过后容易产生很多不连续的内存空间,即内存碎片。太多的内存碎片,会导致在分配占用大量内存空间的对象时候没有足够的连续内存而不得不提前触发另一次垃圾收集动作。

 

复制算法

        为了解决上述算法的效率问题,复制算法出现了。它将可用的内存空间分为大小相同的两块,每次只使用其中的一块内存区域,当这快内存区域使用完时,就将存活的对象复制到另一块内存空间中,然后再把使用过的内存空间一次清理干净。

        这样,每次都是对其中的一块区域进行回收,内存分配时也不用考虑内存碎片问题,只要顺序移动堆顶指针,按序分配内存即可,简单高效。

        缺点也很明显,可用内存缩小为原来的一半。

        现代的商业虚拟机都采用此法来回收新生代,由于新生代中的对象一般情况下98%都是朝生夕死的,所以并不需要按照1:1的比例划分空间,而是将内存分为一块较大的Eden空间和两块较小的Survivor空间。每次使用Eden和其中的一块Survivor空间。HotSpot虚拟机按照8:1的空间分配Eden与Survivor空间,也就是说,只有10%的空间是被浪费的。

        当Survivor空间不足时(并不一定每次存活的内存都在10%以内),需要向其他内存空间今夕功能分配担保(Handle Promotion)。

 

标记-整理算法

        复制算法只能在对象存活率较低的情况下有良好的性能表现,但在对象存活率较高的情况下就不适用了,原因是要进行大量的对象复制操作。更关键的是,如果对象存活率高,那么就不得不浪费50%的内存空间来应对对象100%存活的极端情况。所以,在老年代中,一般不采用此方法进行垃圾回收。

        所以,在老年代中,采用的垃圾收集算法是“标记-整理”算法。标记过程和“标记-清除”算法中的标记过程相同,但后续的步骤是将存活的对象向内存的同一端移动,然后直接清理掉剩余的部分。

 

分代收集算法

        当前商业虚拟机的垃圾收集器都采用“分代收集(Generational Collection)”算法,根据对象存活周期的不同而将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点来采用不同的垃圾收集策略。新生代由于对象存活率低,采用复制算法,只要付出复制少量存活对象的代价就可以完成垃圾收集。而老年代由于对象存活率高,标记整理或者标记清除算法就更加适合。

分享到:
评论

相关推荐

    深入理解JVM垃圾收集算法与垃圾收集器

    深入理解JVM垃圾收集算法与垃圾收集器

    Java垃圾收集必备手册

    Java垃圾收集必备手册 Java 垃圾收集是 Java 语言中的一种自动内存管理机制,旨在释放不再使用的内存资源,以避免内存泄漏和提高程序性能。在这篇手册中,我们将深入探究 Java 垃圾收集的基础知识,包括垃圾收集的...

    漫谈Java垃圾收集器.pdf

    漫谈Java垃圾收集器 Java垃圾收集器是Java虚拟机(JVM)中的一种自动内存管理机制,旨在释放程序员从手动内存管理的繁琐工作中解脱出来。垃圾收集器通过跟踪对象的引用关系,确定哪些对象是可以被释放的,然后将其...

    1_Java虚拟机(垃圾收集器和算法).pdf

    本文详细探讨了JVM中的垃圾收集器和垃圾收集算法,以帮助开发者深入理解Java虚拟机的内部运作机制。 垃圾收集(GC,Garbage Collection)是JVM的一个重要功能,用于自动释放不再使用的对象所占用的内存空间,以防止...

    Java垃圾收集处理方法

    GC算法是Java垃圾收集处理方法的核心。GC算法可以分为两大类:基础篇和实现篇。基础篇的GC算法包括标记-清理算法、复制算法和标记-压缩算法。实现篇的GC算法包括Serial GC、Parallel GC、Concurrent Mark-and-Sweep...

    基于实时性的Java虚拟机垃圾收集算法

    ### 基于实时性的Java虚拟机垃圾收集算法:深入解析与优化 #### 引言 垃圾收集(Garbage Collection, GC)是Java语言的重要特性之一,它通过自动化管理内存,减轻了程序员处理内存分配与释放的负担,提高了代码的...

    基于实时性的Java虚拟机垃圾收集算法.pdf

    "基于实时性的Java虚拟机垃圾收集算法" 本文介绍了一种基于实时性的Java虚拟机垃圾收集算法,该算法旨在减少垃圾收集带来的不确定性暂停,并使用户可以指定一个时间段内垃圾收集导致应用程序暂停的最长时间。该算法...

    Java的垃圾收集器(GC)

    ### Java的垃圾收集器(GC)详解 #### 引言 垃圾收集器(Garbage Collector,简称GC)是Java语言的一项重要特性,它自动化管理内存,显著减轻了开发者手动管理内存负担,避免了常见的内存泄漏问题,提高了程序的...

    Java虚拟机垃圾收集算法的研究和改进.pdf

    Java虚拟机(JVM)垃圾收集算法是Java语言的关键特性之一,负责自动管理内存,提高软件的可靠性,并减少开发者的内存管理负担。垃圾收集机制(GC)的核心目标是识别并回收程序中不再被引用的对象,即所谓的垃圾回收...

    Java垃圾收集必备手册.rar

    这份"Java垃圾收集必备手册"涵盖了Java开发中关于垃圾收集的基本概念、工作原理以及优化策略,对于Java开发者来说是不可多得的学习资源。 一、垃圾收集基本概念 1. 内存管理:Java使用自动内存管理,程序员无需手动...

    【Java技术资料】-Java垃圾收集必备手册

    Java垃圾收集是Java编程中的一个核心概念,它关乎程序的性能和稳定性。这份"Java技术资料"中的"Java垃圾收集必备手册"很可能包含了关于Java内存管理、垃圾收集机制、垃圾收集器以及如何优化垃圾收集的一些关键知识点...

    【Java正来-Java虚拟机专题】-Java垃圾收集器与内存分配策略

    主要整理内容为:分析了垃圾收集的算法和JDK1.7中提供的7款垃圾收集器的特点以及运作原理。以及内存分配策略

    Java垃圾回收之分代收集算法详解

    Java垃圾回收之分代收集算法详解 Java垃圾回收之分代收集算法是Java虚拟机中的一种垃圾回收机制,它根据对象的存活周期的不同将内存划分成几块,新生代和老年代,以便于采用最适当的收集算法提高垃圾收集的效率。 ...

    基于嵌入式Java虚拟机的垃圾收集优化算法应用.pdf

    6. 实际应用分析:本研究通过理论分析与实践相结合的方式,探讨如何将优化后的垃圾收集算法应用到嵌入式Java虚拟机中,并分析算法实施前后的性能差异。这包括但不限于应用程序响应时间、吞吐量、内存占用等性能指标...

    java垃圾收集机制

    ### Java垃圾收集机制详解 #### 一、引言 在现代软件开发中,Java作为一种广泛使用的编程语言,其自动管理内存的功能极大地简化了程序设计工作。传统的编程语言如C/C++要求开发者手动管理内存,这不仅增加了编程的...

    Java垃圾收集必备手册.pdf

    本文档是一本关于Java垃圾收集的教程,主要涉及了垃圾收集的概念、算法以及调优技巧。垃圾收集是Java内存管理的一个重要方面,它能够自动回收堆内存中不再使用的对象,减少内存泄漏的风险。本手册提供了一个全面的...

    计算机专业外文翻译(Java垃圾收集器)

    Java垃圾收集器是Java语言中的一个关键特性,它负责自动管理程序中的内存,尤其是在对象生命周期结束时进行内存的释放。这篇3000字的毕业设计论文外文翻译主要探讨了Java垃圾收集器的工作原理及其对性能的影响。 在...

    Java垃圾收集概述.pdf

    Java垃圾收集概述主要关注的是Java运行环境中的内存管理和优化。在Java编程中,开发者无需手动管理内存,因为Java虚拟机(JVM)自动执行垃圾收集(Garbage Collection, GC),负责回收不再使用的对象所占用的内存...

Global site tag (gtag.js) - Google Analytics