jvm 垃圾回收 分代-JVM垃圾回收关于New Generation为什么分为三个区域的疑问

问题描述

JVM垃圾回收关于New Generation为什么分为三个区域的疑问

最近打算写一个分代垃圾回收,我打算在New Generation中分为两个区域,即只有 from区域 跟 to区域,但是最近查看了好多关于JVM的分代垃圾机制的文章,JVM在New Generation中分为三个区域,即Eden、from、to三个区域,好多文章介绍Eden都是该区域是一整块连续的堆,加速了分配的速度,但是我想问的是,如果只分为两个区域,每次从from拷贝到to后,to区域剩下的空间也是连续的,分配速度应该也是很快的,这点让我很迷惑,为什么JVM要分为三个区域。
所以,
我想问一下我这分两个区域跟JVM分三个区域的区别在哪里?
以及JVM分三个区域的出发点以及好处在哪里?
请求各位大大帮忙解惑

时间: 2024-12-31 02:54:31

jvm 垃圾回收 分代-JVM垃圾回收关于New Generation为什么分为三个区域的疑问的相关文章

JVM分代垃圾回收机制关于New Generation为什么分为三个区域的疑问

问题描述 最近打算写一个分代垃圾回收,我打算在NewGeneration中分为两个区域,即只有from区域跟to区域,但是最近查看了好多关于JVM的分代垃圾机制的文章,JVM在NewGeneration中分为三个区域,即Eden.from.to三个区域,好多文章介绍Eden都是该区域是一整块连续的堆,加速了分配的速度,但是我想问的是,如果只分为两个区域,每次从from拷贝到to后,to区域剩下的空间也是连续的,分配速度应该也是很快的,这点让我很迷惑,为什么JVM要分为三个区域.所以,我想问一下我

JVM分代垃圾回收策略的基础概念

由于不同对象的生命周期不一样,因此在JVM的垃圾回收策略中有分代这一策略.本文介绍了分代策略的目标,如何分代,以及垃圾回收的触发因素. 文章总结了JVM垃圾回收策略为什么要分代,如何分代,以及垃圾回收的触发因素. 为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象.线程.Socke

JVM调优总结(五)-分代垃圾回收详述1

为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式 ,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象.线程.Socket连接, 这类对象跟业务直接挂钩,因此生命周期比较长.但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短 ,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对

JVM 分代GC策略分析

我们以Sun HotSpot VM来进行分析,首先应该知道,如果我们没有指定任何GC策略的时候,JVM默认使用的GC策略.Java虚拟机是按照分代的方式来回收垃圾空间,我们应该知道,垃圾回收主要是针对堆(Heap)内存进行分代回收,将对内存可以分成新生代(Young Generation).年老代(Tenured Generation)和永久代(Permanent Generation)三个部分. 分代GC 分代GC包括如下三代: 新生代(Young Generation) 新生代有划分为Ede

Java虚拟机:JVM内存分代策略

Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代.老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略. 为什么要分代? 堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,我们程序所有的对象实例都存放在堆内存中.给堆内存分代是为了提高对象内存分配和垃圾回收的效率.试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收都要遍历所有的对象,遍历这些对象所花费

JVM调优总结(六)-分代垃圾回收详述2

分代垃圾回收流程示意

理解JVM(4)- 堆内存的分代管理

前一篇从整体上了解了一下JVM的运行时数据区,它由_线程私有的栈内存_和_线程共享的堆内存.方法区_组成.本章节将详细了解一下堆内存又被分为哪些区域,或者说JVM是如何把对象分配到这些区域上的 JVM根据对象在内存中存活时间的长短,把堆内存分为新生代(包括一个Eden区.两个Survivor区)和老年代(Tenured或Old).Perm代(永久代,Java 8开始被"元空间"取代)属于方法区了,而且仅在Full GC时被回收.大致如下图 为对象分配空间,就是把一块确定大小的内存从堆中

JVM内存管理:GC算法精解---分代搜集算法

引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力. 那么分代搜集算法是怎么处理GC的呢? 对象分类 上一章已经说过,分代搜集算法是针对对象的不同特性,而使用适合的算法,这里面并没有实际上的新算法产生.与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用. 首先我们来探讨一下对象的不同特性,接下来LZ和各位来一起给这些对象选择GC算法. 内存中的对象按照生命周期的长短大致可以分为三种

gc、jvm-java垃圾回收机制GC判断可回收对象算法

问题描述 java垃圾回收机制GC判断可回收对象算法 java垃圾回收机制中,讲到GC判断可回收对象算法时,有一种可达性算法,不明白它如何解决对象循环引用问题的? 解决方案 本问题,摘录周志明先生的<深入理解Java虚拟机>一书中对可达性算法的分析. 首先,可达性算法基本思路是定义一些列称为"GC-Roots"的对象作为起始阶段,从这些节点向下搜索,搜索走过的路径称为引用链,当一个对象到GCRoots没有任何引用链时(即从GCRoots到这个对象不可达),则证明此对象是不可