`

JVM学习笔记二 - 垃圾收集

    博客分类:
  • JVM
阅读更多

     JVM的垃圾收集主要是对JAVA堆进行收集,JAVA堆分为新生代和老年代。

       (1)、新生代区域:指存放新创建的对象或者未达到老年代要求的对象。

       (2)、老年代区域:除新生代外的内存空间,就是老年代的内存空间,用于存放长久未被收集的对象。

1、对象是否需要收集?

如何判断一个对象是否需要收集?这个问题一般采用如下两种算法进行处理:

(1)、引用计数算法(Reference Counting):给对象添加一个引用计数器,每当有一个地方引用对象,计数器就加1;当引用失效时,计数器就减1;任何时刻计数器的值为0时,都认为对象已经可以回收了。这种方式的缺点是很难判断相互引用的对象。

(2)、根搜索算法(GC Roots Tracing):通过名为"GC Roots"的对象作为起点,当对象到GC Roots的路径不可到达时,则证明此对象是不可用的。JAVA采用这种算法。

JAVA中,可作为GC Roots的对象有:

  • 虚拟机栈(栈帧中的本地变量表)中引用的对象。
  • 方法区中的类静态属性引用的对象。
  • 方法区中常量引用的对象。
  • 本地方法栈中JNI引用的对象。

2、垃圾收集算法

        (1)、标记-清除(Mark-Sweep)算法:最基础的垃圾收集算法,分为“标记”和“清除”两个阶段进行垃圾收

集:首先标记出所有需要回收的对象,标记完成后统一回收掉所有被标记的对象。

这种算法存在两个缺点:

1)、效率问题:标记和清除过程的效率都不高;

2)、空间问题:回收后会产生大量的空间碎片,影响大对象分配时的空间利用。

 (2)、复制(Copying)算法:将内存空间分为大小相等的两块,每次只使用其中的一块内存,当这一块的内存用得差不多了,就把还存活着的对象复制到另一块内存中,然后把使用的内存空间全部清理掉。这样的好处是不需要考虑内存碎片空间的管理。缺点是需要损失一半的内存。

        新生代采用这种算法,但是不是使用1:1的方式进行分配,因为新生代中的大部分对象在垃圾收集发生时将会被回收,因此它将内存区域划分为一个Eden区和两个Survivor区,Eden和Survivor的比例默认为8:1。

 (3)、标记-整理算法(Mark-Compact):过程跟"标记-清除"算法一致,只是在最后不是一次清除所有存活的对象,而是将存活的对象移动到一端,然后将端边界外的内存进行清理。 

(4)、分代收集算法(Generational Collection):根据对象的周期特点,采用特定的算法进行收集,一般是把Java堆分为新生代和老年代,在新生代中,采用”复制“算法;在老年代中,采用”标记-整理“或者”标记-清理“算法。

3、垃圾收集器

垃圾收集器是各种垃圾收集算法的具体实现。先看看JDK6中垃圾收集器的组成图:



  • 大小: 36.1 KB
分享到:
评论

相关推荐

    JVM学习笔记2018-4-151

    本篇JVM学习笔记主要关注对象声明、相关内存分配方法以及虚拟内存的物理和虚拟寻址概念。 首先,我们来看对象声明。在Java中,对象是在堆上创建的。例如,`CHeapObj` 类展示了如何在C++中模拟Java对象在堆上的分配...

    JVM学习笔记(一)

    ### JVM学习笔记(一) #### 一、JVM概述与工具使用 JVM(Java Virtual Machine)是Java语言的核心组成部分之一,它为Java程序提供了一个跨平台的运行环境。本篇学习笔记主要介绍如何利用一系列工具来查看和监控JVM...

    JVM学习笔记

    ### JVM学习笔记 #### JVM内存模型 (JMM) JVM内存模型主要分为以下几个部分: - **Java堆**:这是所有线程共享的一块区域,在虚拟机启动时创建。主要用于存放对象实例,几乎所有的对象实例都在这里分配内存。 - *...

    JVM 学习笔记(Java虚拟机)

    **JVM学习笔记(Java虚拟机)** Java虚拟机(JVM)是Java语言的核心组成部分,它是Java程序运行的平台,负责解释和执行字节码。深入理解JVM对于优化Java应用程序性能至关重要。本笔记将从以下几个方面详细介绍JVM:...

    JVM学习笔记.docx

    本篇JVM学习笔记主要涵盖了以下几个核心知识点: 1. **运行时数据区**: - **程序计数器**:记录当前线程执行的字节码的行号,用于线程恢复执行时跳转到正确位置。 - **Java虚拟机栈**:每个方法执行时创建的栈帧...

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

    在JVM的学习中,理解其内存模型、垃圾收集算法以及类加载机制至关重要。 1. **JVM内存模型** - **方法区**:也称为“永久代”,存储虚拟机加载的类信息、常量、静态变量等,是线程共享的区域。在Java 8之后,这...

    jVM学习笔记.ppt

    新生代和旧生代采用不同的垃圾收集算法,例如Minor GC和Major GC,以确保高效且无内存泄漏的运行环境。通过调整JVM参数如-Xmx、-Xms、-Xmn等,可以定制堆的大小和新生代与Survivor的比例,以适应不同应用的需求。 ...

    jvm学习笔记.zip

    3. **监控和诊断**:使用JMX(Java Management Extensions)或专门的工具如VisualVM,对JVM的内存使用和垃圾收集情况进行实时监控,找出性能瓶颈。 4. **减少内存泄漏**:避免创建过多的短生命周期对象,尤其是大...

    jvm视频及笔记

    4. **垃圾收集**:JVM如何自动管理内存,理解不同垃圾收集器如Serial、Parallel、CMS、G1等的工作机制,以及新生代和老年代的概念。 5. **类加载器**:系统类加载器、扩展类加载器和应用程序类加载器之间的双亲委派...

    JVM学习资料+笔记

    这个资料包不仅涵盖了理论知识,还包含个人的学习笔记,对于学习和掌握JVM的各个方面都将大有裨益。无论是初学者还是经验丰富的开发者,都可以从中找到提升自己技能的宝贵资源。通过深入学习和实践,可以更好地理解...

    JVM学习笔记核心知识点整理

    ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

    jvm学习笔记

    《JVM学习笔记》 Java虚拟机(JVM)是Java平台的核心组成部分,它负责运行所有的Java应用程序。这篇笔记将深入探讨JVM的工作原理、内存管理、类加载机制以及优化策略,帮助读者全面理解JVM并提升Java程序的性能。 ...

    JVM工作原理学习笔记

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的计算机系统,负责执行Java字节码。本文将深入探讨JVM的工作...这本《JVM工作原理学习笔记》应包含了这些内容的详细讲解,对于学习和提升JVM相关知识极具价值。

    狂神说JVM探究.rar

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

    JVM笔记(阳哥).zip

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

    JVM的学习笔记PDF版

    这份“JVM的学习笔记PDF版”应该包含了关于JVM的详细信息,帮助学习者深入理解这个复杂的系统。JVM允许Java代码跨平台运行,通过解释器、类加载器、垃圾收集器等组件实现“一次编写,到处运行”的理念。 1. **JVM...

    JVM性能学习笔记思维导图

    本文将根据"JVM性能学习笔记思维导图"的主题,详细阐述JVM的主要组成部分,性能调优的关键点以及相关的工具与实践策略。** 1. **JVM结构与内存模型** - **类装载器(ClassLoader)**:负责加载类文件,确保类在运行...

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

    二、JVM内存回收机制 1. **堆内存**:所有对象都在堆内存中分配,包括实例变量和数组。Java的垃圾回收主要关注堆内存的管理。 2. **垃圾回收算法**: - **标记-清除(Mark-Sweep)**:首先标记出所有活动对象,...

    大数据笔记kafka-jvm.zip

    《大数据笔记:深入理解Kafka...通过深入学习《大数据笔记:深入理解Kafka与JVM》,读者将不仅掌握Kafka的基本概念和操作,还能了解到JVM在大数据处理中的关键作用,为在实际工作中应对复杂的大数据挑战打下坚实基础。

Global site tag (gtag.js) - Google Analytics