`
JAVA那点事
  • 浏览: 17912 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类

JAVA垃圾回收器学习笔记

阅读更多

 

JAVA垃圾回收器学习——稻草人

(文章学习内容来自课本书籍和互联网,并在不断完善中)

 

JAVA的一个重要特点就是具有一个垃圾回收器,能够实现垃圾的自动回收,而不需要程序员去考虑。Java解释器在为一个实例对象分配完存储空间后,便开始记录该实例对象所占用的内存空间的使用,直至使用完毕便将其回收。 在Java的运行过程中,一个垃圾回收器会不定时的被唤醒来检查是否有不再被使用的对象,并释放它们占用的内存空间。垃圾回收器的启用不由程序员控制,无规律可循。

不同Java虚拟机有不同的垃圾回收机制,一般有两种比较常用:复制式回收机制和“自省式”回收机制。

1.1.复制式回收机制:

这种策略的执行模式是现将正在运行的程序暂停,然后把正在被使用的所有对象复制一份到另一块堆内存中,那些 不再被使用的对象所占的内存空间被释放。此方式需要的内存空间是所需维护的两倍,而且当程序只产生了少量甚 至没有垃圾时,就会导致效率低下。

1.2.“自省式”回收机制:

检测所有正在使用的对象,并为他们标注,完成这项工作后再将所有不再被使用的对象所占据的内存空间一次释放 掉。尽管此种方式速度很慢,但在只有少量的垃圾或者没有垃圾时,就极具优势。

 

这两种方式颇具互补性,所以在一些JVM中结合的运用。如果程序中的对象长期的使用,JVM就换至“自省式”,而当产生大量垃圾或所占的内存不连续情况严重时,又会换至“复制式”。

 

垃圾收集的目的在于清除不再使用的对象。gc(即是垃圾回收机制)通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

2.1.引用计数

引用计数存储对特定对象的所有引用数,也就是说,当应用程序创建引用以及引用超出范围时,jvm必须适当增减引用数。当某对象的引用数为0时,便可以进行垃圾收集。

2.2.对象引用遍历

早期的jvm使用引用计数,现在大多数jvm采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。 为此,gc需要停止其他的活动活动。这种方法意味着所有与应用程序相关的工作停止,只有gc运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的gc不断增加或同时运行以减少或者清除应用程序的中断。有的gc使用单线程完成这项工作,有的则采用多线程以增加效率。

 

*另外网上还看到几种垃圾回收机制,如下:

(1)增量收集器

增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。

(2)分代收集器

这种收集器把堆栈分为两个或多个域,用以存放不同寿命的对象。jvm生成的新对象一般放在其中的某个域中。过一段时间,继续存在的对象将获得使用期并转入更长寿命的域中。分代收集器对不同的域使用不同的算法以优化性能。

(3)并发收集器

并发收集器与应用程序同时运行。这些收集器在某点上(比如压缩时)一般都不得不停止其他操作以完成特定的任务,但是因为其他应用程序可进行其他的后台操作,所以中断其他处理的实际时间大大降低。

(4)并行收集器

并行收集器使用某种传统的算法并使用多线程并行的执行它们的工作。在多cpu机器上使用多线程技术可以显著的提高java应用程序的可扩展性。

 

 

分享到:
评论

相关推荐

    垃圾回收机制学习笔记

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

    Java学习笔记_垃圾回收

    Java垃圾回收(Garbage Collection, 简称GC)是Java编程语言中一项重要的自动内存管理机制,...通过阅读"Java学习笔记_垃圾回收.pdf",你将进一步深入理解这个主题,掌握如何在实际项目中有效利用和优化垃圾回收机制。

    Java 学习笔记Java学习笔记

    Java是一种广泛使用的面向对象的...这包括垃圾回收机制、JVM调优参数、类加载机制、栈和堆内存管理等。 Java学习笔记涵盖了这些核心知识点,通过深入学习和实践,你可以逐步掌握Java编程,并应用于实际项目开发中。

    飞加Java学习笔记_垃圾回收

    #### 一、JAVA垃圾回收机制概述 Java作为一门纯粹的面向对象编程语言,其程序执行过程中会产生大量的对象实例,尤其是在复杂应用或长时间运行的系统中。这些对象在完成其生命周期后,如果得不到妥善处理,将导致...

    java学习笔记markdown

    9. **JVM内部机制**:简述Java虚拟机的工作原理,包括类加载、内存管理、垃圾回收机制,有助于优化代码性能。 10. **泛型**:讨论Java泛型的使用,如何编写类型安全的代码,并理解其类型擦除的原理。 11. **枚举与...

    Java JDK 7学习笔记 PDF

    12. **垃圾收集优化**:JDK 7在垃圾回收机制上也有所改进,如G1垃圾收集器的引入,提供了一种可预测停顿时间的内存管理策略。 这些是Java JDK 7中一些关键的更新和改进,对于开发者来说,理解和掌握这些知识点对于...

    Java学习笔记——良葛格

    JDK5.0引入了一些重要的新特性,例如自动内存管理的垃圾回收机制、枚举类型、匿名内部类、泛型以及增强的for循环(也称为foreach循环)。这些特性极大地提升了Java的可读性和实用性。 此外,笔记可能还会涉及异常...

    JAVA学习笔记 林信良

    在内存管理和垃圾回收方面,书中有专门章节讲解Java的内存模型以及自动内存管理机制,解释了如何避免内存泄漏和理解引用类型,这对于优化程序性能和解决内存问题非常有帮助。 书中还详细阐述了异常处理,这是Java...

    韩顺平编写的java学习笔记(全)

    4. **高性能**:JVM优化和垃圾回收机制确保高效运行。 #### 第一个Java程序示例 - **Hello World示例**:演示了基本的Java语法结构。 - **算术运算示例**:展示了变量声明、赋值和基本算术运算。 #### JDK安装与...

    Java学习笔记PPT

    Java的语法与C++有诸多相似之处,但更加强调了内存管理的自动化,例如通过垃圾回收机制来避免内存泄漏。PPT可能包括了变量声明、数据类型(如整型、浮点型、字符型和布尔型)、运算符(算术、比较、逻辑等)以及流程...

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

    6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行、并发且具有低延迟特性的垃圾回收器,适用于大型应用。 7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间...

    《Java学习笔记》

    7. **高级特性**:这可能包括反射、动态代理、注解、JVM内存模型、垃圾回收机制、设计模式等。这些内容可以帮助开发者更好地理解和优化Java程序的性能。 每个PDF部分都应包含详细的实例和练习,以帮助读者巩固理论...

    Java学习笔记(源码)

    13. **JVM原理**:理解Java虚拟机的工作方式,包括类加载、内存管理和垃圾回收机制,有助于优化程序性能。 14. **Java 8及更高版本的新特性**:例如lambda表达式、Stream API、Optional类等,这些新特性使Java编程...

    java读书笔记笔记笔记笔记笔记笔记

    它可能详细讨论了Java虚拟机(JVM)如何执行字节码,包括方法调用、异常处理和垃圾回收机制。 2. **初始化总结this关键字.ppt** - "初始化"通常与类的构造器和成员变量的初始设置有关。"this"关键字在Java中用于引用...

    Java公司培训经典学习笔记

    Java公司培训经典学习笔记是针对Java编程语言进行深入学习的一份宝贵资料,涵盖了从基础到高级的诸多知识点,旨在帮助开发者提升技能,适应企业级项目开发的需求。以下将详细阐述这些笔记中的关键点: 1. **Java...

    瑜琅java学习笔记

    - **健壮性**:自动垃圾回收等机制减少了内存泄漏等问题。 - **多线程**:内置对多线程的支持,便于开发并发应用。 - **架构中立**:Java程序独立于硬件平台,只需要相应的Java虚拟机即可运行。 - **解释性**:Java...

    Java JDK 6学习笔记.zip

    1. **改进的性能**:JDK 6对Java虚拟机(JVM)进行了优化,提升了运行时的性能,包括更快的垃圾回收和更高效的内存管理。 2. **动态语言支持**:引入了JSR 223(Scripting for the Java Platform),使得Java平台...

    java学习笔记总结.doc

    这篇文档是个人的Java学习笔记总结,旨在帮助0基础的学习者从零开始掌握Java基础知识,并逐步成为专业的Java开发者。以下是笔记中涉及的一些关键知识点: 1. **Java开发环境的设置**: 要开始Java编程,首先需要...

    Java学习笔记(必看经典).doc

    JVM是Java平台的核心,它实现了跨平台的能力,并通过垃圾回收机制自动管理内存。 10. **Java标准库**:Java的API包含了大量预定义的类和接口,如集合框架、I/O、网络编程、日期时间处理、数学运算等,极大地丰富了...

Global site tag (gtag.js) - Google Analytics