Java内存管理——内存回收

Java内存回收其实就是指堆内存的回收,ImportNew中有篇文章已经介绍的非常细致了,本文主要是一个概括,细节部分请参考ImportNew中:

http://www.importnew.com/15330.html


堆内存的分代回收

1)分代回收的依据:

①对象生存时间的长短:大部分对象在Young期间就被回收

②不同代采取不同的垃圾回收策略:新(生存时间短)老(生存时间长)对象之间很少存在引用

 

2) 分代回收

Young代:

回收机制:对象数量少,采用复制回收。将Eden和Survivor From中可达对象复制到Survivor To中,然后清空Eden和Survivor From中的对象,最后To变From,From变To;

组成区域:1个Eden区,2个Survivor区

对象来源:绝大多数对象分配到Eden区,一些大的对象直接分配到Old代

回收频率:Young代中大部分对象很快进入不可达状态,所以回收频率高,速度快

 

Old代:

回收机制:标记压缩算法,即将可达对象搬迁到堆内存的一端,然后清理掉端边界以外的内存,减少内存碎片;

对象来源:1.大的对象直接进入老年代;2.Young中生成时间长的对象;

回收频率:因为很少对象会死掉,所以频率较低,也需要较长时间来完成;

 

Permanent代:

用    途:用来装载Class,方法等信息,默认为64M,不会被回收

对象来源:eg:对于像Hibernate,Spring这类喜欢AOP动态生成类的框架,往往会生成大量的动态代理类,因此需要更多的Permanent代内存。所以我们经常在调试Hibernate,Spring的时候经常遇到java.lang.OutOfMemoryError:PermGenspace的错误,这就是Permanent代内存耗尽所导致的错误。

回收频率 :不会被回收


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值