`
matchless1688
  • 浏览: 26311 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

深入JVM学习笔记 垃圾收集

阅读更多
垃圾收集

1、垃圾收集算法
     两件事情。首先,必须检测出垃圾对象;其次,必须回收垃圾对象所使用的堆空间并还给程序。
   垃圾检测通常通过建立一个根对象的集合并且检查从这些根对象开始的可触及性来实现(跟对象总是可触及的)。
  
   --引用计数收集器:已经不在被接受使用
  
   --跟踪收集器:追踪从根节点开始的对象引用图。
  
   --压缩收集器:它把活动的对象越过空闲区滑动到堆的一端,在这个过程中,堆的另一端出现一个大的连续空闲区。所有被移动的对象的引用也被更新,指向新的位置。
   更新被移动的对象的引用有时候通过一个间接对象引用层可以变得更简单。不直接引用堆中的对象,对象的引用实际上指向一个对象句柄表。对象句柄才指向堆中对象的实际位置,当对象被移动时只有这个句柄需要被更新为新位置。这种方法简化消除了堆碎块的工作,但每一次对象访问都带来了性能损失(两次引用解析)。
  
   --拷贝收集器
  
  
   --按代收集的收集器
  
  
   --自适应收集器
  
   --火车算法(渐进式收集算法):基于按代收集。目标是为了提供限定时间内按代收集的收集器中成熟对象空间的渐进式收集。
  
   --堆中每个对象的三种状态:可触及的,可复活的,不可触及的,版本1.2中扩充了三个新状态:软可触及,弱可触及,影子可触及;原来的"可触及"状态被称作"强可触及"。
   可触及性的三个比较弱的形式设计到1.2开始新引入的实体——引用对象,引用对象封装了其他对象的连接,被指向的对象称为引用目标。 java.lang.ref.Reference包含对应的三个子类:SoftReference,WeakReference,PhantomReference。
   强引用和较弱形式的引用的区别:强引用禁止引用目标被垃圾收集,而弱引用不禁止。
   垃圾收集器可以随意更改而是强可触及的任何对象的可触及性状态。
   一旦某个被影子引用的对象编程影子可触及状态,垃圾收集器立即把该引用对象加入队列。垃圾收集器从不会清楚一个影子引用,所有的影子引用都必须由程序明确的清楚。如果一个对象到达了影子可触及状态,它不能再被复活。
  
   --JVM对软引用的处理
  
  
   --JVM对弱引用的处理
  
  
   --JVM对影子引用的处理
  
  • 大小: 193 KB
  • 大小: 66.5 KB
  • 大小: 173.5 KB
  • 大小: 106.8 KB
  • 大小: 185.2 KB
分享到:
评论

相关推荐

    jvm学习笔记.zip

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

    jVM学习笔记.ppt

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

    JVM学习资料+笔记

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

    深入JVM笔记word版

    它被进一步划分为新生代和老年代,以优化垃圾收集效率。新生代又细分为Eden空间、From Survivor空间和To Survivor空间。 - **新生代**: 主要用于存放新创建的对象。当对象存活一定周期后,会被转移到老年代。 - **...

    JVM 学习笔记(Java虚拟机)

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

    jvm视频及笔记

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

    JVM学习笔记2018-4-151

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

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

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

    jvm学习笔记

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

    JVM工作原理学习笔记

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

    JVM的学习笔记PDF版

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

    JVM笔记(阳哥).zip

    《JVM笔记(阳哥)》是一份深入探讨Java虚拟机(JVM)的资料,由阳哥精心整理。这份笔记涵盖了JVM的基础概念、内存管理、类加载机制、性能优化等多个方面,对于理解Java程序的运行机制以及提升开发效率具有重要的...

    深入Java虚拟机JVM类加载学习笔记

    ### 深入Java虚拟机JVM类加载学习笔记 #### 一、Classloader机制解析 在Java虚拟机(JVM)中,类加载器(ClassLoader)是负责将类的`.class`文件加载到内存中的重要组件。理解类加载器的工作原理对于深入掌握JVM以及...

    狂神说JVM探究.rar

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

    JVM内存管理学习笔记

    《JVM内存管理学习笔记》 在Java世界中,JVM(Java Virtual Machine)是运行所有Java应用程序的核心。深入理解JVM内存管理对于优化程序性能、预防和解决内存泄漏问题至关重要。本文将从JVM内存模型、内存区域划分、...

    JVM学习笔记

    ### JVM学习笔记知识点详解 #### 一、JVM的基本结构 **JVM(Java Virtual Machine,Java虚拟机)**是一种可以执行Java字节码的虚拟机。它为Java提供了平台无关性,使得Java代码可以在任何安装了JVM的平台上运行。 ...

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

    Java虚拟机(JVM)是Java程序运行的基础,它的历史发展和内存回收机制是Java开发者必须深入了解的关键领域。本文将详细探讨JVM的发展历程以及内存管理中的垃圾回收机制。 一、JVM的历史发展 1. **早期阶段**:1995...

    学习jvm笔记.zip

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

    JVM:深入理解Java虚拟机 - 学习笔记

    这份学习笔记将涵盖JVM的关键概念、架构以及它如何影响Java程序的性能。我们将探讨以下几个方面: 1. **JVM概述** Java虚拟机(JVM)是Java平台的核心组成部分,它为Java应用程序提供了一个运行环境,负责执行字节...

    jvm-study:jvm学习笔记

    本学习笔记旨在全面解析JVM的工作原理,涵盖内存管理、类加载机制、垃圾收集、性能调优等多个关键领域,帮助读者从基础到深入地掌握JVM。 1. **JVM结构与运行过程** - JVM由类装载器、运行时数据区、执行引擎、...

Global site tag (gtag.js) - Google Analytics