JDK堆内存模型

1  jdk1.7堆内存模型

1.1  Young 年轻区(代)
 
Young 区被划分为三部分, Eden 区和两个大小严格相同的 Survivor 区,其中, Survivor 区间中,某一时刻只有
其中一个是被使用的,另外一个留做垃圾收集时复制对象用,在 Eden 区间变满的时候, GC 就会将存活的对
象移到空闲的 Survivor 区间中,根据 JVM 的策略,在经过几次垃圾收集后,任然存活于 Survivor 的对象将被移
动到 Tenured 区间。
 
1.2 Tenured 年老区
 
Tenured 区主要保存生命周期长的对象,一般是一些老的对象,当一些对象在 Young 复制转移一定的次数以
后,对象就会被转移到 Tenured 区,一般如果系统中用了 application 级别的缓存,缓存中的对象往往会被转
移到这一区间。
 
1.3 Perm 永久区
 
Perm 代主要保存 class,method,fifiled 对象,这部份的空间一般不会溢出,除非一次性加载了很多的类,不过在
涉及到热部署的应用服务器的时候,有时候会遇到 java.lang.OutOfMemoryError : PermGen space 的错误,
造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的 class 没有被卸载掉,这样就造
成了大量的 class 对象保存在了 perm 中,这种情况下,一般重新启动应用服务器可以解决问题。
 
2 jdk1.8堆内存模型
2.1 jdk1.8 年轻代和老年代几乎一样,jdk 1.8中只有年轻代和年老代组成 ,注意的是1.8中变化最大的perm区用matespace进行了替换,jdk1.8中matespace占用的是本地内存空间,而不是虚拟机的内存空间
 
2.2 为什么要废弃永久代
《1》 移除永久代是为融合 HotSpot JVM JRockit VM 而做出的努力,因为 JRockit 没有永久代,不需要配置永久代。
《2》 由于永久代内存经常不够用或发生内存泄露,爆出异常 java.lang.OutOfMemoryError: PermGen 基于此,将永久区废弃,而改用元空间,改为了使用本地内存空间。
 
     
 
 
 
 
 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值