JVM垃圾回收策略和垃圾收集器

如何判断一个对象已死

1引用计数器法

(2)可达性分析

在java语言中,可以作为GC root的对象包括如下:

《1》虚拟机栈中的引用的对象。

《2》方法区静态属性引用的对象。

《3》方法区中常量引用的对象。

《4》本地方法中引用的对象。

引用

《1》强引用:是JVM普遍存在的,如Object a = new Object(); 只要强引用还存在,永远不会被回收。

《2》软引用:描述还有用但是非必须的对象。对于这类引用对象,在系统发生内存溢出之前,将会把这些对象列进回收范围之中进行第二次回收

《3》弱引用:比软引用弱,只生存到下一次垃圾回收发生之前。当发生gc,这类对象就会被回收。

《4》虚引用:这类引用最弱,完全不对其生命周期存在影响,存在的目的是在这个对象在回收时候收到一个系统通知。

这四种引用强度依次减弱。


垃圾回收算法

一、标记-清除算法

效率低,内存碎片化。

二、复制算法

浪费空间,主要使用在年轻代

三、标记整理算法

主要使用在老年代

        四、分代收集算法

垃圾收集器

Serial

      (1)特点

——它是单线程进行垃圾回收

——独占式的垃圾回收

——进行垃圾回收的时候,java应用程序中的线程都需要暂停等待。

——使用的是复制算法

——适合CPU等硬件不是很好的场合

ParNew

(1)特点

——多线程进行垃圾回收

——回收的时候也会出现所有线程暂停,但是是多线程的,所有暂停短暂,但是在单核CPU上,效率还不如单线程,由于线程切换。

——使用的是复制算法

ParallelGC

(1)特点

——和ParNew原理是一样的,只是多了关注系统吞吐量

——使用的复制算法

——支持使用自适应的GC调节策略

CMS收集器

(1)特点

——属于老年代并发收集器

——是并发回收,非独占式的收集器,大部分应用程序不会停止

——使用并发标记清除算法,回收后会存在内存碎片,可以使用参数设置针对内存碎片进行压缩整理

——与ParallelGC和ParallelOldGC不一样,主要关注系统的停顿时间

       G1收集器

        (1)特点: 
   ——独特的垃圾回收策略, 属于分代垃圾回收器, 
  ——使用分区算法, 不要求eden, 年轻代或老年代的空间都连续 
  ——并行性: 回收期间, 可由多个线程同时工作, 有效利用多核cpu资源 
  ——并发性: 与应用程序可交替执行, 部分工作可以和应用程序同时执行, 
  ——分代GC: 分代收集器, 同时兼顾年轻代和老年代 
  ——空间整理: 回收过程中, 会进行适当对象移动, 减少空间碎片 
  ——可预见性: G1可选取部分区域进行回收, 可以缩小回收范围, 减少全局停顿 
(2)G1的收集过程 
1. 新生代GC: 
2. 并发标记周期: 
   ——初始标记新生代GC(此时是并行, 应用程序会暂停止)–>根区域扫描–>并发标记–>重新标记(此时是并行, 应用程序会暂停止)–>独占清理(此时应用程序会暂停止)–>并发清理 
3. 混合回收: 
   ——这个阶段即会执行正常的年轻代gc, 也会选取一些被标记的老年代区域进行回收, 同时处理新生代和年老轻 
4. 若需要, 会进行FullGC: 
   ——混合GC时发生空间不足 
   ——在新生代GC时, survivor区和老年代无法容纳幸存对象时, 
   ——以上两者都会导致一次FullGC产生 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值