垃圾回收器一面收缩,一面使堆中的对象紧凑排列,这样堆指针就可以很容易的移动到更靠近传送到的开始处,从而避免了页面错误。通过对垃圾回收器对对象重新排列,实现了一种高速的、有无限空间可供分配的堆模型。
/*
The trick is that the garbage collector steps in, and while it collects the garbage it compacts all the objects in the heap so that you’ve effectively moved the “heap pointer” closer to the beginning of the conveyor belt and farther away from a page fault. The garbage collector rearranges things and makes it possible for the high-speed, infinite-free-heap model to be used while allocating storage.
*/
引用计数是一种简单但速度很慢的垃圾回收技术。每个对象都有个引用计数器,当有连接到对象时,计数器加1.当引用离开作用域,或被置为null时。引用计数减1,虽然管理引用计数器开销不大,但是这开销在整个程序生命周期中将持续发生。垃圾回收器会在含有全部对象的列表上进行遍历,当找到某个对象的引用计数为0时,就释放该对象所占用的空间。
这种方法有个缺陷,就是如果循环引用对象,可能会出现对象应该被回收,但是计数不为零的情况。对垃圾回收器而言,定位这样的交互的自引用的对象需要大量的垃圾收集额外的工作。引用计数常用说明一种垃圾回收的工作方式,但似乎从未用在虚拟机的实现中。
/*
A simple but slow garbage-collection technique is called reference counting. This means that each object contains a reference counter, and every time a reference is attached to that object, the reference count is increased. Every time a reference goes out of scope or is set to null, the reference count is decreased. Thus, managing reference counts is a small but constant overhead that happens throughout the lifetime of your program. The garbage collector moves through the entire list of objects, and when it finds one with a reference count of zero it releases that storage (however, reference counting schemes often release an object as soon as the count goes to zero). The one drawback is that if objects circularly refer to each other they can have nonzero reference counts while still being garbage. Locating such self-referential groups requires significant extra work for the garbage collector. Reference counting is commonly used to explain one kind of garbage collection, but it doesn’t seem to be used in any JVM implementations.
*/
在更快的方案中,垃圾回收器并发是基于引用计数器的。它是依据:对任何“活”的对象,一定能追溯到它在堆的堆栈或静态存储区域之中的引用。这个引用链条可能穿越多个层次的对象。因此,如果你开始从堆栈和静态存储区域,遍历所有的引用 ,你就能找到live对象。
对于发现的每个引用,必须追踪它所有引用的对象,然后是此对象包含的所有的引用,如此反复的进行。直到“根源于堆栈和静态存储区的引用” 所形成的网络全部被访问为止。
你所访问的每个对象必须是“活的”。
java虚拟机采用的是一种自适应的垃圾回收技术。主要由两种:mark-and-sweep and stop-and-copy
分享到:
相关推荐
【Java面试题】Java垃圾回收机制
Java垃圾回收机制是Java编程中至关重要的一部分,它自动管理内存,释放不再使用的对象,避免内存泄漏,并优化内存使用。Java虚拟机(JVM)的堆内存是存放对象的主要区域,当对象通过new等指令创建后,垃圾回收机制...
### Java垃圾回收及内存泄漏知识点详解 #### 一、Java内存管理 1. **运行时数据区**:Java虚拟机管理的内存主要分为以下几个部分: - **方法区(Method Area)**:存储类的信息(如类名、字段、方法等)、常量、...
Java垃圾回收机制是Java编程语言的关键特性,负责自动管理程序中的内存,确保程序高效、稳定地运行。在Java虚拟机(JVM)中,垃圾回收的主要任务是识别并清理不再被程序使用的对象,以避免内存泄漏。以下是关于Java...
Java垃圾回收机制是Java编程中一个非常重要的概念,尤其在面试和实际开发中常常被讨论。垃圾回收(Garbage Collection, GC)是Java虚拟机自动管理内存的一种方式,旨在自动识别并释放不再使用的对象,从而避免内存...
Java垃圾回收与回收机制
### Java垃圾回收(Garbage Collection)深度解析 #### 核心概念与机制 Java垃圾回收(Garbage Collection,简称GC)是Java运行时环境(JRE)中的一个关键特性,它自动管理对象的生命周期,释放不再使用的对象所...
除了上述基础算法,现代的Java垃圾回收器,如G1(Garbage-First)、ZGC(Z Garbage Collector)和Shenandoah,采用了更先进的策略,如并发标记、分代收集、增量收集等,以减少垃圾回收对应用程序性能的影响。...
自己学习总结JVM垃圾回收机制的结构图,一起分享!!!
"垃圾回收机制"这个概念在很多高级语言如Java或Python中是非常常见的一种自动内存管理方式,但在C++中,它并不是标准库的一部分。C++的内存管理主要依赖于程序员手动进行,通过new和delete操作符来分配和释放内存。...
Java垃圾回收(Garbage Collection, 简称GC)是Java编程语言中一项重要的自动内存管理机制,旨在自动识别并释放不再使用的对象所占用的内存空间。这一特性使得程序员无需手动进行内存管理,降低了出现内存泄漏等问题...
通过对Java堆和方法区的理解,结合不同的垃圾回收算法和垃圾回收器的选择,开发者可以更加灵活地调整和优化程序的运行性能。随着技术的发展,未来垃圾回收机制还将不断改进和完善,以适应更加复杂多变的应用需求。
#### 一、JAVA垃圾回收机制概述 Java作为一门纯粹的面向对象编程语言,其程序执行过程中会产生大量的对象实例,尤其是在复杂应用或长时间运行的系统中。这些对象在完成其生命周期后,如果得不到妥善处理,将导致...
本教程将涵盖Java的基础知识,特别是关于内存管理的重要概念——Java内存区域、Out of Memory (OOM)错误以及垃圾回收器和垃圾回收策略。 1. **Java入门**: Java的学习始于基础语法,包括变量、数据类型、运算符、...
在Java中,垃圾回收器会定期检查内存中哪些对象不再被引用,然后回收这些内存供后续使用。在C++中,通常需要程序员自己负责内存分配和释放,这可能导致内存泄漏或悬挂指针等问题,而引入GC机制则可以解决这些问题。 ...
Java的垃圾回收(GC)机制是Java编程中一个至关重要的概念,它负责自动管理内存,回收不再使用的对象,以防止内存泄漏。理解GC的工作原理和优化策略对于开发高性能的Java应用至关重要。 首先,GC的基本目标是识别并...
6. **Java 7与G1 GC**:2011年,Java 7引入了G1(Garbage First)垃圾回收器,它是一种并行、并发且具有低延迟特性的垃圾回收器,适用于大型应用。 7. **Java 8与元空间**:2014年,Java 8中,永久代被元空间...
JVM的工作原理及其垃圾回收机制对于理解和优化Java应用程序至关重要。通过对JVM内存管理的理解,我们可以更好地控制对象的生命周期,减少不必要的内存消耗,并提高程序的性能。此外,了解不同的垃圾回收算法可以帮助...
第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS(Current Mark Sweep)收集器 1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍...
在Java中,内存管理主要依赖于垃圾回收器(Garbage Collector,简称GC),它自动回收不再使用的对象所占用的内存空间,以避免内存泄漏。 垃圾回收机制的核心目标是识别并清理不再被程序引用的对象。GC通过一系列...