Java虚拟机内存的代的划分

一 Java虚拟机为什么需要分代

# 如果每次都对整个堆空间进行垃圾回收,花费的时间肯定较长

# 不同的对象生命周期不一样,如果每次垃圾回收这些周期的较长的也都去遍历一下,显然没有意义。

所以实现分而治之的思想,采用分代,方便进行不同生命周期的对象的管理。

 

二 如何划分代

2.1JDK1.8 之前

堆内存划分成2代:新生代(Young区),老年代(Tenured区)

方法区:持久代(Perm)

 

2.1.1 新生代(Young区)

新生代由三个区域组成:Eden区,Survivor1区和Survivor2区

Eden区:一般对象最初分配的区域,(所谓一般就是指大多数情况下,如果有个对象很大,可能直接就分配到老年代了)。

Survivor区:分为Survivor1和Survivor2。他们之间默认比例关系是:Eden: Survivor1: Survivor2 = 8:1:1

 

新生代是如何工作的呢?

当Eden初次配对象的时候,Survivor1和Survivor2都为空,没有对象分配。当Eden满了,会进行一次Minor GC,会通过可达性分析检测哪些对象已经没有了和GC Roots的引用,这些对象被标记为删除,然后有引用的就是还存活的对象,这时候会把存活对象移到Survivor1这个区域,并且在每一个对象头信息的age值+1。然后Eden被清空,又可以分配对象了。

当Eden再次满的时候,这时候GC会同时检测Eden和Survivor1区域,看哪些对象是存活的,如果存活将Eden和Survivor1的存活对象移到Survivor2区域,然后对象的age+1. 这时候会把Eden和Survivor1区域清空。这时候Survivor1就是备用区域。

当Eden再次满的时候,重复之前动作,GC会对Eden和Survivor2进行检测,看哪些对象是存活的,如果存活将Eden和Survivor2的存活对象移到Survivor1区域,然后对象的age+1. 这时候会把Eden和Survivor2区域清空。这时候Survivor2就是备用区域。

伴随着age的增长,年龄值达到阀值,默认为15,就会把这些对象移动到老年代。

 

2.1.2老年代(Tenured区)

Tenured区:一旦存活对象的age超多一定阈值就会晋升到Tenured区,因此可以理解为Tenured区一般存生命周期长的对象。很显然,随着时间流逝,Tenured区也会被填充满,此时就会触发Full GC,如果使用CMS算法那么此时也叫CMS GC。

 

2.1.3 持久代(Perm)

持久代一般跟堆没啥关系,它主要是存放一些类的元数据,以及常量池,它可以通过-XX:PermSize及-XX:MaxPermSize来进行调节。如果它的空间用完了,会导致java.lang.OutOfMemoryError: PermGen space的异常。

 

2.2JDK1.8 之后

JDK1.8 完全移除了持久代(Perm space),准确的说JDK1.7就已经开始移除,只不过JDK1.8是彻底移除了。取而代之的是新的内存区域MetaSpace。以前存在方法区的一些数据,现在转移到了Java堆中和MetaSpace中。比如字符串常量池就转移到了Java堆中,符号引用就转移大了本地内存中。

 

注意的是元空间它并并不是虚拟机内存区域的一部分,而是使用的本地内存。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小:

-XX:MetaspaceSize:初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整,如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值

-XX:MaxMetaspaceSize,最大空间,默认是没有限制的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值