JVM垃圾回收
JVM垃圾回收
xinyitianii 发表于4年前
JVM垃圾回收
  • 发表于 4年前
  • 阅读 175
  • 收藏 14
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 理解垃圾回收,开发更加健壮的程序

1、垃圾收集算法核心思想

    java语言建立了垃圾回收机制,用于跟踪正在被使用(引用)的对象和没有被使用(引用)的对象,该机制可以有效防范动态内存分配中可能发生的两个危险:因垃圾过多而导致内存耗尽,以及不恰当的内存释放造成内存非法引用。

    垃圾收集的核心思想是:对虚拟机的可用空间即堆空间进行识别,如果对象正在被引用,则称其为活对象,如果没有被引用,则称为垃圾对象。可以回收其占据的空间,用于再分配。
2、触发主GC的条件

    (1)、当应用程序空闲时,gc会被调用。因为gc运行在优先级最低的线程中,当没有应用线程运行的时候,gc会被调用。

    (2)、当jvm内存空间即堆空间不足时,gc会被调用。应用线程在运行过程中创建对象时,如果没有足够的内存空间,jvm会强制执行一次GC用于回收内存再分配。如果内存空间任然不够,则会再执行2次GC,如果任然无法满足的话,就会报”out of memory“错误。

3、减少GC开销的措施

    (1)、将不再使用的对象置为null。一般情况下,jvm会将值为null的对象当做垃圾,将不再使用的对象置为null,方便GC判定,从而提高GC效率。

    (2)、不要显示调用System.gc()。显示调用GC,多数情况下回增加主GC的频率,也就增加了间歇性停顿的次数。

    (3)、减少临时对象的使用。临时对象在跳出调用函数后,会成为垃圾对象。

    (4)、能用基本类型就不用引用类型。基本类型变量占用的内存资源和其引用对象所占内存资源要少很多

    (5)、在做字符串累加时,用stringBuffer替代String。string存储的字符串不可变,string在累加的时候会产生垃圾对象。而stringBuffer在累加时在原来对象上直接增加就可以了。

    (6)、尽量少使用静态对象。静态对象不会被当做垃圾回收,会常驻内存。

    (7)、分散对象创建和删除的时间。短时间内创建大量的对象,会需要大量的内存,jvm此时只能进行主GC,以回收内存。

    

标签: JVM GC
共有 人打赏支持
粉丝 1
博文 26
码字总数 6774
×
xinyitianii
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: