精华内容
下载资源
问答
  • java新生代和老年代

    2019-03-31 23:14:04
    堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的...

    堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。

    这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。

    堆的内存模型大致为:

    新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。老年代 ( Old ) = 2/3 的堆空间大小。其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 to,以示区分。
    默认的,Edem : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。

    根据垃圾回收机制的不同,Java堆有可能拥有不同的结构,最为常见的就是将整个Java堆分为

    新生代和老年代。其中新生带存放新生的对象或者年龄不大的对象,老年代则存放老年对象。

    新生代分为den区、s0区(from)、s1区(to),s0(from)和s1(to)也被称为from和to区域,他们是两块大小相等并且可以互相角色的空间。

    绝大多数情况下,对象首先分配在eden区,在新生代回收后,如果对象还存活,则进入s0(from)或s1(to)区,之后每经过一次

    新生代回收,如果对象存活则它的年龄就加1,对象达到一定的年龄后,则进入老年代。

    展开全文
  • java新生代和老年代的垃圾回收规则

    千次阅读 2019-05-05 19:45:07
    java新生代分为两部分:Eden区两个Survivor区,它们的比例是8:1:1,两个Survivor区又分为 fromSurvivor区to Survivor区,其中新生代每次进行Minor GC(新生代的GC)之前,to Survivor区一定是空的。 每当新创建...

    新生代:

    1. java新生代垃圾回收运用的是复制算法。
    2. java新生代分为两部分:Eden区和两个Survivor区,它们的比例是8:1:1,两个Survivor区又分为 fromSurvivor区和to Survivor区,其中新生代每次进行Minor GC(新生代的GC)之前,to Survivor区一定是空的。
    3. 每当新创建一个对象而此时Eden区内存不足的时候,就会进行Minor GC,然后Eden区仍然活着的对象会复制到to Survivor区,而from Survivor区中年龄超过阀值的对象会保存到老年代中,没有超过阀值的对象会保存到to Survivor区中,然后to Survivor区和from Survivor区互换位置,保证每次都有一块Survivor区是空闲的。
    4. 在Survivor区中的对象每经过一次Minor GC年龄就会加1,默认年龄阀值为15,这个阀值可自行设置,设置方法请自行百度。
    5. 当Survivor区中年龄相同的对象加起来超过Survivor区一半内存大小的时候,Survivor区就会提前把大于等于此年龄的对象复制到老年代中。
    6. 某些大对象(内存大)创建的时候不经过新生代,而是直接放在老年代中,原因是减少每次复制大对象时浪费是时间,所以尽可能减少大对象的创建。

    老年代:

    在进行Minor GC之前,JVM会先检查老年代最大可用连续空间是否大于新生代历次晋升到老年代对象的平均大小,如果大于,将尝试进行一次Minor GC,否则就进行Full GC(全局GC)。
    老年代运用标记-整理算法回收垃圾,将存活的对象向一端移动,清楚边界以外的部分。

    展开全文
  • Java堆可以分为新生代和老年代两个区,其中新生代又可以分为一个Eden区和两个Survivor区,两个Survivor区分别被命名为From和To以示区分,新生代和老年代的比例为1:2,它们共同组成堆的内存区,所以新生代占堆的1/3...

    Java堆可以分为新生代和老年代两个区,其中新生代又可以分为一个Eden区和两个Survivor区,两个Survivor区分别被命名为From和To以示区分,新生代和老年代的比例为1:2,它们共同组成堆的内存区,所以新生代占堆的1/3,老年代占2/3,但这个比例可以修改,下面分别来介绍一下新生代和老年代。

    1、【新生代】

    新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中。Java虚拟机每次使用新生代中的Eden和其中一块Survivor(From),在经过一次Minor GC后,将Eden和Survivor中还存活的对象一次性地复制到另一块Survivor空间上(这里使用的复制算法进行GC),最后清理掉Eden和刚才用过的Survivor(From)空间。将此时在Survivor空间存活下来的对象的年龄设置为1,以后这些对象每在Survivor区熬过一次GC,它们的年龄就加1,当对象年龄达到某个年龄(默认值为15)时,就会把它们移到老年代中。

    在新生代中进行GC时,有可能遇到另外一块Survivor空间没有足够空间存放上一次新生代收集下来的存活对象,这些对象将直接通过分配担保机制进入老年代;

    总结:

    1、Minor GC是发生在新生代中的垃圾收集,采用的复制算法;

    2、新生代中每次使用的空间不超过90%,主要用来存放新生的对象;

    3、Minor GC每次收集后Eden区和一块Survivor区都被清空;

    2、【老年代】

    老年代里面存放都是生命周期长的对象,对于一些较大的对象(即需要分配一块较大的连续内存空间),是直接存入老年代的,还有很多从新生代的Survivor区域中熬过来的对象。

    老年代中使用的是Full GC,Full GC所采用的是标记-清除算法。老年代中的Full GC不像Minor GC操作那么频繁,并且进行一次Full GC所需要的时间要比Minor GC的时间长。

    总结:

    1、老年代中使用Full GC,采用的标记-清除算法

    展开全文
  • Java中,堆被分为两块区域:新生代老年代。堆大小=新生代+老年代。(分别占堆空间为1/3、2/3)新生代新生代又被分为Eden、from survivor、to survivor(8:1:1)新生代这样划分是为了更好的管理堆内存中的对象,方便...

    Java堆是Java虚拟机管理的最大的一块内存空间,主要存放对象实例。

    在Java中,堆被分为两块区域:新生代、老年代。

    堆大小=新生代+老年代。(分别占堆空间为1/3、2/3)

    新生代

    新生代又被分为Eden、from survivor、to survivor(8:1:1)

    新生代这样划分是为了更好的管理堆内存中的对象,方便GC算法-->“复制算法”来进行垃圾回收。

    JVM每次只会使用Eden和其中一块survivor来为对象服务,所以无论什么时候,都会有一块survivor空间,因此新生代实际可用空间为90%。

    新生代GC(minor gc):指发生在新生代的垃圾回收动作,因为Java对象大多数都是“朝生夕死”的特性,所以minor GC非常频繁,使用复制算法快速的回收。

    新生代几乎是所有Java对象出生的地方,Java对象申请的内存和存放都是在这个地方。

    当对象在Eden(包括一个survivor,假如是from),当此对象经过一次minor GC后仍然存活,并且能够被另一块survivor所容纳(这里的survivor则是to),则使用复制算法将这些仍然存活的对象复制到to survivor区域中,然后清理掉Eden和from survivor区域,并将这些存活的对象年龄+1,以后对象在survivor中每熬过一次则+1,当达到某个值(默认为15),这些对象会成为老年代!

    事情不是绝对,有些较大的对象(需要分配连续的内存空间),则直接进入老年代。

    老年代

    老年代GC(major GC):指发生在老年代的垃圾回收动作,所采用的的是“标记--整理”算法。

    老年代几乎都是从survivor中熬过来的,不会轻易“死掉”,因此major GC不会像minor GC那样频繁

    什么叫复制算法

    两块survivor,每次使用其中的块。当这一块使用完了,就将还存储着的对象复制到另一块survivor上面,然后再把已经使用过的内存空间一次清理掉,下图为示意图。

    优点:不用考虑内存碎片问题,实现简单,运行效率高。

    缺点:当对象存活较高(PS:老年代)时,就要进行较多的复制操作,效率会很低。

    e6c9352f9e6b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    复制算法示意图

    什么叫标记--整理算法

    与“标记-清理”算法相似,只是后续不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存,下图为示意图。

    e6c9352f9e6b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    “标记--整理”算法示意图

    展开全文
  • Java中对于垃圾回收的策略有多种,而目前商业虚拟机的垃圾收集都采用“分代收集”,这种算法是根据对象存活周期的不一样将内存分为几块,通常是将Java堆分为新生代和老年代,根据各个年代的特色采用较适合的收集算法...
  • Java 新生代老年代

    2018-10-14 10:15:00
    Java 中的内存区域主要有堆和...堆内存分为两大部分:新生代和老年代,比例关系为1:2。 新生代又分为 Eden、ServivorFrom、ServivorTo 三个区域,比例为8:1:1。ServivorFrom 与 ServivorTo 又被称为幸存者区。 ...
  • Java堆可以分为新生代和老年代两个区,其中新生代又可以分为一个Eden区和两个Survivor区,两个Survivor区分别被命名为From和To以示区分,新生代和老年代的比例为1:2,它们共同组成堆的内存区,所以新生代占堆的1/3...
  • 此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。Java堆是垃圾回收器管理的主要区域,百分之九十九...根据堆中对象的存活周期将堆内存分为新生代和老年代。在新生...
  • 新生代和老年代

    2017-11-23 22:12:10
    以下为我学习java新生代和老年代所整理的笔记。摘自《深入理解java虚拟机》一书。 java堆可以细分为新生代和老年代 新生代:生命周期比较短的对象。 老年代:生命周期比较长的对象。 1、新生代常...
  • Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象...
  • Java堆可以分为新生代和老年代两个区,其中新生代又可以分为一个Eden区和两个Survivor区,两个Survivor区分别被命名为From和To以示区分,新生代和老年代的比例为1:2,它们共同组成堆的内存区,所以新生代占堆的1/3...
  • 1. Java堆中各代分布: 图1:Java堆中各代分布Young:主要是用来存放新生的对象。Old:主要存放应用程序中生命周期长的内存对象。Permanent:是指内存的永久保存区域,主要存放ClassMeta的信息,Class在被 Load的...
  • java新生代和老年代

    千次阅读 2018-06-25 21:26:49
    图1:Java堆中各代分布 Young:主要是用来存放新生的对象。 Old:主要存放应用程序中生命周期长的内存对象。 Permanent:是指内存的永久保存区域,主要存放ClassMeta的信息,Class在被 Load的时候被放入PermGen ...
  • java 新生代老年代

    2018-08-14 15:34:22
    java堆可以细分为新生代和老年代 新生代:生命周期比较短的对象。 老年代:生命周期比较长的对象。 1、新生代常采用的算法:复制算法 现在商业虚拟机都采用这种收集算法来回收新生代。 新生代的对象98%都是...
  • 对于JVM中的各种问题,可以参考深入理解Java虚拟机:JVM的解析,解读Java虚拟机的重要模块,这篇文章主要是讲Java虚拟机(JVM)中的新生代老年代和永生代。1.为什么JVM会有年轻代我们先来屡屡,为什么需要把堆分代?...
  • 1. Java堆中各代分布: 图1:Java堆中各代分布Young:主要是用来存放新生的对象。Old:主要存放应用程序中生命周期长的内存对象。Permanent:是指内存的永久保存区域,主要存放ClassMeta的信息,Class在被 Load的...
  • Eden:survivor(from+to)=6:2=4:1 老年代新生代=2:1 说明OpenJDK就是瞎搞,当为HotSpot时,如果指定了新生代,没有指定比例,那么默认都是1:1,如果没有指定就是上述比例,也就是说我们通常说的1:8指的是survivor的...
  • 转自:...在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To...
  • 1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代... 4).-XX:InitialTenuringThreshol-XX:MaxTenuringThreshold 用于设置晋升到老年代的对象年龄的最小值最大值,每个对象在坚持过一次Minor GC之后,年龄就加1
  • Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,...
  • 介绍得非常详细:新生代回收:(复制...复制算法的新生代分为3个区:较大的Eden两个较小的Survivor(默认的Eden:Survivor = 8:1)。发生在新生代的GC为Minor GC 。在Minor GC时会将新生代中还存活着的对象复制进一...
  • java堆空间的新生代和老年代

    千次阅读 2015-05-12 13:50:01
    Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。 这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象...
  • java堆内存--新生代和老年代

    千次阅读 2018-03-01 10:07:57
    Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,721
精华内容 688
关键字:

java新生代和老年代

java 订阅