hotpot的永久代一点想法

我终于明白了为什么有的FULL GC是针对永久代,有的full gc是带有方法区全部的gc了。因为我们现在用的虚拟机普遍是sun hotpot,它就是使用永久代来实现方法区的,这样jvm就能像管理java堆一样去管理这部分内存,而不需要再重新写管理内存的代码了。而其他的jvm如 jrockit,j9根本就没有永久代这个东西。。。

新生代,永久代,方法区只是java虚拟机规范里的官方模型,至于如何去实现,是由生产厂商确定的。。。方法区虽然是堆得一个逻辑部分,但他还有个名字叫做,non-heap。所以跟堆还是不一样的。

而且hotpot把方法区放到永久代去处理不太好,因为永久代有一个参数:-XX:MaxPermSize,这个参数是来描述永久代的内存上限值,这样的话更容易遇到内存溢出的问题,如果物理机内存比较小的时候,这样是肯定会出问题的。。。相反jroket,j9就不会有这样的问题,方法区是用来存类的结构的,比如static变量,常量,jit代码等等,这都是程序代码中非常重要而且是跟着Jvm生命周期一起走得东西,这些要是内存溢出了。。。整个程序就完蛋了~尤其是32bit机。。。本来就不够放对象头对象实例。。。

当然,我想Hotpot这么普及,肯定有我不知道的解决方法或者现在的机器都太好了。。。或者我没有写过大的类导致永久代都不够放~哎~啥时候能让我试试就好了~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值