garbage collection

   sun垃圾回收学习

  sun的垃圾回收器采用了分代收集器,所谓的分代收集器是把堆分为多个不同的区,根据对象的寿命分别存放,过一段时间继续存在的对象将获得试用期和更长寿命的域,分代收集器对不同的域使用不同的算法进行优化。

  HotSpot把堆分为新域(Eden、两个Survivor Space)、旧域(old generation,tenued)、和永久域(permanent generation),对young generation使用较高频率回收的minor collection,对于old generation使用major collection回收,以上是两种内存收集方式,sun内存收集方式,复制收集即将所有生存的对象搬到另一内存区域,原区域内存被回收,这种方式效率比较高,但是复制需要开销,并且需要额外内存,适用于minor  collection,另一种则mark_compact标记压缩,将存活的对象标记出来,然后搬迁到一起连成大块的内存,其他内存就可以回收了,不需要占用额外的空间,但速度相对慢一些适用于major collection。

  young generation,Eden用于存放生成的一个新的对象,另外的Survivor Space区属于救助区,当Eden区满时,会将当前Eden区复制到另外的两个Survivor Space区,且成为a区和b区,Eden区满------a区/b区,a/b区满-----a/b区,a和b区相互救助,经过一段时间,具体经过多少次的gc频率可以通过-XX:+MaxTenuringThreshold设置,其直接或者n次后进入old generation区,当年轻区满时注意不是指Eden区满时,会触发minor collection,在新区中使用复制收集器,是很合理的因为程序中大多数对象都是短寿命的,理论上可以把Eden区满时,对象复制到年老区,避免救助区来回的复制,但是在实际中的总会有中长寿命对象,对这些对象的标记压缩回收是很昂贵的,所以需要救助区的存在。

  old generation,tenued区,当该区满时会进行major collection,Permanent generation区,是永久区存放class object和method,当该区满时会进行full gc.

  下面是一些收集的常见配置参数:

   java -Xms 128m -Xmx128m -XNewRatio=4 -XNewSize32m -XMaxNewSize32m      **调整堆内存最大128最小128新域在堆域所占比为1:4,新域的大小32m

   java -XX:PerSize32m -XX:MaxPerSize32m    **设置永久域的初始值和最大值,默认4m,当永久域满时会进行一次完整的垃圾回收即做full gc

   java -Xms256m -Xmx256m -Xmn64m -XX:SurvivorRation =2 **调整堆内村最大最小256,新域64m,按照新域比例的二分之一,救助区分别为两个16m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值