美文网首页
JVM内存分代

JVM内存分代

作者: sunyuan1125 | 来源:发表于2017-04-12 21:35 被阅读30次

堆分代

1、新生代 Young

新生代由 Eden 与 Survivor Space(S0,S1)构成,大小通过-Xmn参数指定,Eden 与 Survivor Space 的内存大小比例默认为8:1,可以通过-XX:SurvivorRatio 参数指定,比如新生代为10M 时,Eden分配8M,S0和S1各分配1M。

当新生代发生GC(Minor GC)时,会将存活的对象移动到S0内存区域,并清空Eden区域,当再次发生Minor GC时,将Eden和S0中存活的对象移动到S1内存区域。

存活对象会反复在S0和S1之间移动,当对象从Eden移动到Survivor或者在Survivor之间移动时,对象的GC年龄自动累加,当GC年龄超过默认阈值15时,会将该对象移动到老年代,可以通过参数-XX:MaxTenuringThreshold 对GC年龄的阈值进行设置。

2、老年代old

3、永久代 permatant

在可达性分析法中,判定一个对象objA是否可回收,至少要经历两次标记过程:


1、如果对象objA到 GC Roots没有引用链,则进行第一次标记。

2、如果对象objA重写了finalize()方法,且还未执行过,那么objA会被插入到F-Queue队列中,由一个虚拟机自动创建的、低优先级的Finalizer线程触发其finalize()方法。finalize()方法是对象逃脱死亡的最后机会,GC会对队列中的对象进行第二次标记,如果objA在finalize()方法中与引用链上的任何一个对象建立联系,那么在第二次标记时,objA会被移出“即将回收”集合。

相关文章

  • JVM内存分代

    堆分代 1、新生代 Young 新生代由 Eden 与 Survivor Space(S0,S1)构成,大小通过-...

  • JVM堆分代笔记

    JVM内存分代策略 JVM 根据对象的存活周期不同,把堆内存划分为三块,一般为新生代、老年代、永久代(对于HotS...

  • 8. JVM Memory Model and Visibili

    前言:JVM内存模型、Java内存区域、GC分代回收容易搞混。前面讲解了JVM内存区域,它是Java代码编译成.c...

  • Java垃圾回收机制

    Java的内存分布 在JVM中,内存是按照分代进行组织的。 其中,堆内存分为年轻代和年老代,非堆内存主要是Perm...

  • jvm垃圾回收策略

    一、jvm堆内存的分代划分在基于分代的内存回收策略中,堆空间通常都被划分为3个代,年轻代,年老代(或者tenure...

  • jvm参数

    JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分...

  • JVM GC

    分代GC JVM的GC机制叫做分代GC(generational GC),把内存分为两种:新生代(Young Ge...

  • JVM调优

    一、JVM内存模型 1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代)Tenured(年老代)永久代...

  • 【干货】java面试核心知识点精讲---jvm运行内存

    JVM的运行时内存 JVM的运行时内存也叫作JVM堆,从GC的角度可以将JVM堆分为新生代、老年代和永久代。其中新...

  • JVM垃圾回收分代与原理

    前面的内容分析了JVM运行时的内存区域划分,并代码进行了实际的讲解。下面我们对象分代年龄的角度对JVM内存进行划分...

网友评论

      本文标题:JVM内存分代

      本文链接:https://www.haomeiwen.com/subject/mmcvattx.html