JVM:堆中的年轻代和老年代

讲一下新生代、老年代的区别?

堆主要保存对象实例,堆中的对象被分为两个区域:新生代和老年代。

新生代主要用来存放新生的对象。

老年代主要存放应用中生命周期长的内存对象

永久代:永久保存区域。主要存放Class和Meta(元数据)的信息。在Java8中,永久代已经被移除,取而代之的是一个称之为“元数据区”(元空间)的区域。元空间与永久代之间的区别在于:元空间并不在虚拟机中,而是使用本地内存。因此,默认情况下,元空间的大小仅受本地内存的限制。

垃圾回收机制(GC),为什么要GC?

为了让程序员在编写代码时不用过多的考虑内存释放的问题,所以,在Java语言中,有了自动的垃圾回收机制,也就是GC(Garbage Collection)。

有了垃圾回收机制后,程序员只需要关心内存的申请即可,内存的释放由系统自动识别完成。

垃圾回收机制中的新生代和老年代

年轻代占三分之一堆空间,老年代占三分之二堆空间
年轻代被划分为三部分,Eden区和两个大小必须相同的Survivor区,其中,两个Survivor区,某一时刻只有其中一个是被使用的,另外一个留做垃圾回收时保存仍然存活的对象。所有的年轻代首先会在Eden区进行分配,当Eden区满了之后会进行第1次GC
第1次GC之后仍然存活的对象(假设为a),会复制a到Survivor From区,同时a年龄+1(此时年龄=1),然后清理a之前在堆空间中占用的内存
第2次会对Eden+From同时进行GC,之后仍然存活的对象会复制到Survivor To区,年龄+1,同时清理之前占用的内存(此时From区会被清空)
第3次GC之后,会使用From区去存放存活的对象a,而To区会被清空

当Survivor区域对象的年龄达到15时,会将此对象移到老年代区域中

如果老年代空间不够使用后,会进行Full GC,整个堆内存都会被回收

对象什么时候可以被垃圾器回收

如果一个对象没有任何的引用指向它时,则有可能会被垃圾回收器回收

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值