JVM对内存的回收依赖于“死去”的对象,所以在对内存回收之前,第一件事就是确认哪些对象还“活着”,哪些对象已“死去”(即不可能再被任何途径使用的对象)。
1.引用计数法
很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1 ;当引用失效时,计数器值就减1 ;任何时刻计数器都为0 的对象就是不可能再被使用的。笔者面试过很多的应届生和一些有多年工作经验的开发人员,他们对于这个问题给予的都是这个答案。客观地说,引用计数算法(Reference Counting)的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法,也有一些比较著名的应用案例,例如微软的COM(Component Object Model)技术、使用ActionScript 3 的FlashPlayer、Python 语言以及在游戏脚本领域中被广泛应用的Squirrel 中都使用了引用计数算法进行内存管理。但是,Java 语言中没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间的相互循环引用的问题。
2.根搜索算法
在主流的商用程序语言中(Java 和C#,甚至包括前面提到的古老的Lisp),都是使用根搜索算法(GC Roots Tracing)判定对象是否存活的。这个算法的基本思路就是通过一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots 没有任何引用链相连(用图论的话来说就是从GC Roots 到这个对象不可达)时,则证明此对象是不可用的。在Java 语言里,可作为GC Roots 的对象包括下面几种:
虚拟机栈(栈帧中的本地变量表)中的引用的对象。
方法区中的类静态属性引用的对象。
方法区中的常量引用的对象。
本地方法栈中JNI(即一般说的Native 方法)的引用的对象。
参考:”深入理解Java虚拟机“ 一书
相关推荐
在Java编程中,JVM(Java虚拟机)的垃圾回收机制是自动管理内存的重要部分。垃圾回收机制负责回收那些不再被程序使用、即无法达到的对象所占用的内存空间。我们通过深入探讨以下几个关键点来理解JVM垃圾回收机制的...
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾回收器(Garbage Collector, GC),以及内存分配策略。理解这些概念对于优化Java应用性能至关重要。本篇文章将深入探讨JVM的垃圾回收机制以及...
本文将详细探讨JVM的发展历程以及内存管理中的垃圾回收机制。 一、JVM的历史发展 1. **早期阶段**:1995年,Sun Microsystems发布了Java的第一个版本,JVM作为其核心组成部分,主要应用于嵌入式设备和网络应用。初...
JVM 内存分配与垃圾回收详解 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,它提供了一个平台独立的方式来执行 Java 字节码。...了解 JVM 内存分配与垃圾回收是 Java 开发者必须掌握的基础知识之一。
JVM内存模型与垃圾回收是...总的来说,理解JVM内存模型和垃圾回收机制对于优化Java应用性能至关重要,它涉及到内存分配策略、垃圾收集算法的选择以及内存参数的调整,这些都需要开发者具备深入的JVM知识和实践经验。
第三节:定位垃圾对象的依据 1.1 引用计数法 1.2 可达性算法 第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)算法 第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集...
Java虚拟机(JVM)的垃圾回收(GC)机制是Java程序高效运行的关键部分,它自动管理内存,释放不再使用的对象以避免内存泄漏。本文主要探讨JVM堆内存的结构和GC的工作原理,以及如何进行性能调优。 JVM堆是Java应用...
自己学习总结JVM垃圾回收机制的结构图,一起分享!!!
Java虚拟机(JVM)内存模型和垃圾回收机制是Java开发中至关重要的概念。本文将深入探讨这两个主题,帮助理解JVM如何管理和优化内存。 **一、类加载器和双亲委派机制** 类加载器是JVM的一个组成部分,负责加载Java...
Java虚拟机(JVM)内存管理和垃圾回收是Java编程中至关重要的概念,它们直接影响着程序的性能和稳定性。本文将详细解析JVM内存结构以及垃圾回收机制。 首先,JVM内存主要分为四个区域: 1. **堆(Heap)**:这是...
垃圾回收(Garbage Collection, GC)是JVM自动进行的一项重要任务,用于回收不再使用的对象所占用的内存空间,以避免内存泄漏。本文将深入探讨JVM垃圾回收器的工作原理,并通过实例来帮助开发者理解和应用。 1. ...
在Java虚拟机(JVM)中,垃圾回收(Garbage Collection, GC)是自动管理内存的重要机制,它负责识别并释放不再使用的对象所占用的内存空间。GC的主要目标是避免内存泄漏,确保程序的稳定性和高效运行。这篇博客将...
Java虚拟机(JVM)内存分配机制和垃圾回收(Garbage Collection, GC)是Java编程中的核心概念,它们直接影响到程序的性能和稳定性。本文主要围绕JVM内存区域的分配策略,尤其是对象在新生代(Young Generation)的...
Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是垃圾回收(Garbage Collection,简称GC)。GC是JVM自动管理内存的主要方式,它负责识别并清理不再使用的对象,以避免内存泄漏和资源浪费。理解并...
垃圾回收是JVM自动进行内存管理的一种机制,其主要目标是回收不再使用的对象所占用的内存空间,以防止内存泄漏。GC分为多个阶段: 1. **标记(Marking)**:确定哪些对象是“活的”,哪些是可回收的。常见的算法有...
Java虚拟机(JVM)是Java程序运行的基础,它的内存管理与垃圾回收机制对于程序的性能至关重要。在Java中,内存分为堆内存、栈内存、方法区、程序计数器和本地方法栈五个主要区域。下面我们将深入探讨这些区域以及...
### JVM垃圾回收原理详解 #### 一、相关概念与基本回收算法 ...通过以上步骤可以看出,JVM中的分代垃圾回收能够有效地区分不同生命周期的对象,并采取适当的策略进行管理,从而提高了系统的整体性能。
垃圾回收器通过确定哪些对象不再被引用(即GC Roots不可达),来释放不再使用的内存空间。GC Roots包括:虚拟机栈中的本地变量、方法区的类静态变量、全局引用(如JNI本地方法的引用)等。垃圾回收器会定期检查这些...