题目是个大话题,不过在Oracle官方的FAQ里,个人觉得短小而精辟。短短几句话,可以让那些对generational collector不太清楚的朋友们迅速了解:
The default collector in HotSpot has two generations: the young generation and the tenured generation. Most allocations are done in the young generation. The young generation is optimized for objects that have a short lifetime relative to the interval between collections. Objects that survive several collections in the young generation are moved to the tenured generation. The young generation is typically smaller and is collected more often. The tenured generation is typically larger and collected less often.
HotSpot默认回收器有两代:年轻代和年老代。大多数的分配都在年轻代中完成。年轻代对对象做了优化,即相对于回收间隔来说,这些对象拥有更短的生命周期。在年轻代中的一些对象,加入经过几次回收之后仍然存在,那么它们将被移至年老代中。相对来说,年轻代往往比较小并且会被更频繁的进行垃圾回收,而年老代正好相反。
The young generation collector is a copying collector. The young generation is divided into 3 spaces: eden-space, to-space, and from-space. Allocations are done from eden-space and from-space. When those are full a young generation is collection is done. The expectation is that most of the objects are garbage and any surviving objects can be copied to to-space. If there are more surviving objects than can fit into to-space, the remaining objects are copied into the tenured generation. There is an option to collect the young generation in parallel.
年轻代回收器是基于复制的。年轻代被分为三个空间:eden-space, to-space, and from-space.分配的动作就在eden-space和from-space中完成。年轻代经过回收以后,我们期望的结果是大部分的对象将会被回收,而那些没有被回收的对象就被复制到to-space中,加入存活下来的对象不能所有都装进to-space,那么剩下的对象直接将被送进年老代。当然,也可以选择在年轻代中并行收集(也就是使用多个线程同时进行垃圾回收的工作)。
The tenured generation is collected with a mark-sweep-compact collection. There is an option to collect the tenured generation concurrently.
年老代使用mark-sweep-compact策略进行回收,也可以选择并发回收。
分享到:
相关推荐
根据提供的文件信息,“HotSpot实战[完整版][带书签].pdf”这本书主要围绕HotSpot虚拟机进行深入探讨,HotSpot作为Java虚拟机的一种实现,是当前最广泛使用的JVM之一,尤其在企业级应用中占据重要地位。下面将根据...
5. ** Shenandoah 收集器**:虽然在部分内容中未提及,但也是Java 14的一个选项,提供低暂停时间,使用 `-XX:+UseShenandoahGC` 开启。 G1 收集器: G1 是一种并发标记清除垃圾收集器,它将堆划分为多个区域,并且...
这种分代收集策略可以有效减少垃圾回收的频率和暂停时间。 4. **线程支持**:HotSpot 内置了强大的线程支持能力,能够高效地处理多线程并发问题。此外,HotSpot 还提供了一些工具,如 JMX 和 JConsole,帮助开发者...
在Java世界中,JVM扮演着至关重要的角色,它是Java“一次编写,到处运行”这一跨平台特性背后的实现者。HotSpot虚拟机是JVM的一种实现,其特点包括: 1. **即时编译(Just-In-Time, JIT)**:HotSpot虚拟机采用混合...
4. **内存模型**:了解Java内存模型(JMM)和Hotspot中的堆内存布局,包括新生代、老年代、永久代(或元空间)等区域,有助于优化内存使用。 5. **线程与并发**:Hotspot支持多线程并发,其内部实现了线程调度和...
在实际的虚拟机实现中,如Java的HotSpot VM,Turing算法通常与其他算法结合,例如标记-压缩(Mark-Compact)、复制(Copying)和分代收集(Generational GC)。这些组合可以提供更好的性能和内存利用率。 理解并...
- **精确的分代压缩垃圾收集**:能够高效回收不再使用的内存空间。 - **快速的线程同步机制**:采用锁消除、锁细化等技术提高同步效率。 - **动态去优化与激进编译器优化并存**:根据运行时情况调整优化策略。 - **...
在Java中,自动内存管理是通过垃圾收集器来实现的,它可以在不需要程序员干预的情况下,自动回收堆内存中不再使用的对象。 垃圾收集的概念包括了多个方面,例如希望垃圾收集器具备的特性、设计选择、性能指标和分代...
HotSpot VM是Oracle JDK中默认的JVM实现,它提供了一种称为HSDB(HotSpot Debugger Bridge)的工具,用于在运行时查看和分析JVM内部的数据。本篇将通过HSDB的使用案例来探讨HotSpot VM的运行时数据。 首先,我们...
《垃圾回收系列(3):CLR与...总的来说,CLR和JVM的垃圾回收机制在设计理念上有相似之处,但在具体实现上存在显著差异,包括分代策略、回收模式选择和算法应用。理解这些差异对于优化各自平台上的应用程序性能至关重要。
HotSpot虚拟机主要采用分代收集理论,将堆分为年轻代(Young Generation)和老年代(Old Generation),并通过不同的算法进行垃圾回收。 #### 四、单例对象是否会被垃圾回收 ##### 4.1 争议背景 关于单例对象是否会成为...
在垃圾回收领域,两者都采用了分代式垃圾回收策略,但具体实现和优化有所不同。 首先,分代机制是基于对象生命周期的假设,新创建的对象通常很快消亡,而老对象更可能长期存在。在CLR中,对象被分为0代、1代和2代,...
在HotSpot VM的Serial GC中,Cheney算法被用于新生代的垃圾回收,尤其是对于DefNewGeneration的处理。这个算法在实际的代码实现中可能会有各种变体,但基本逻辑保持不变,即从根集合出发遍历对象图,将存活对象复制...
分代回收进一步优化了这一过程,根据对象生命周期长短将其分配到不同代的堆,年轻代(包括Eden和Survivor区)用于短暂对象,老年代用于长期存活的对象。 JVM的垃圾回收器设计需要权衡性能和复杂性。顺序执行与并行...
分代回收进一步细化了这一过程,将对象根据生存时间分配到不同代的堆中,年轻代适用于频繁回收的短生命周期对象,而年老代则保存较稳定的存在。 垃圾回收器的设计决策涉及几个关键点:顺序执行与并行执行、并发执行...
- **分代收集(Generational GC)**:根据对象的生命周期,将堆分为新生代和老年代,不同年代采用不同的垃圾回收策略。 3. **垃圾回收器**: - **Serial GC**:单线程的垃圾回收器,适合轻量级应用。 - **...
在JDK9中,HotSpot虚拟机有以下几个重要的改进: 1. JEP 102:模块系统(Module System)引入:JDK9引入了全新的模块系统,这是一项重大的架构改变,目的是提高代码的封装性和安全性,同时降低JDK的体积。HotSpot...
在垃圾回收中,主要关注的是对象的可达性。如果一个对象无法从GC Roots(如虚拟机栈中的引用、方法区中的类静态属性和常量、JNI引用等)通过引用链到达,那么这个对象就被认为是不可达的,进而可以被视为垃圾进行...