对象引用和垃圾回收器

对象引用和垃圾回收器

强引用:

只要对象有强引用关系,GC就不会对他进行清除.

即使内存不够,也只会抛出异常OOM

软引用:(内存不够即回收)

虚拟机尽量让软引用存活时间长一些,只有在内存不够时,才会进行回收.

第一次回收是不可达对象,当系统内存不够时,对有着软引用关联的对象进行回收,在抛出内存溢出异常前,进行回收.如果内存还是不够,抛出内存溢出异常.

弱引用:

在GC时,只要发现弱引用,就会直接进行回收,不管内存是否足够.

虚引用:(对象回收跟踪)

又称为"幽灵引用",是引用类型中最弱的一个.

通过虚引用的get方法无法获得数据,它的唯一目的是跟踪垃圾回收过程.

GC时如果发现虚引用,就会将他加入引用队列,以便于通知应用程序对象的回收情况

可以将一些资源释放操作放在虚引用中执行和记录.

垃圾回收器

按线程数分: 串行垃圾回收器和并行垃圾回收器

串行:在同一个时间段内只有一个CPU用于执行垃圾回收操作,此时工作线程暂停,直到GC完成.

按工作模式分:分为独立式垃圾回收器和并发式垃圾回收器

并发式与应用程序交替执行,减少应用程序的停顿时间

独立式一旦运行,停止所有的应用程序线程,直到结束.

按工作区间分:年轻代垃圾回收器和老年代垃圾回收器

性能指标:

**吞吐量:**代码运行时间占总时间的比例(总运行时间:程序运行时间和内存回收时间)

**暂停时间:**执行GC时,工作线程的暂停时间

垃圾收集开销:垃圾收集时间占总时间的比例

收集频率:相比于应用程序,收集操作发生的频率

内存占用:java堆区所占用的大小

快速:一个对象从创建到被回收的时间

CMS回收器(低延迟)

以获取停顿时间最短为目标的收集器

优点:

并发收集

低延迟

缺点:

1.会产生内存碎片

2.对CPU资源比较敏感:

占用一部分线程导致应用程序变慢.总吞吐量降低

3.无法处理浮动垃圾

在并发标记时如果出现新的垃圾对象,无法对象其进行标记

G1回收器(区域划分代式)

需要做三件事:

分配内存

确保存活的对象

回收垃圾对象

从整体上看: 它是基于"标记-整理"算法实现的收集器

从局部上看:他是基于"复制"算法实现的 ;这就意味着没有内存碎片.

流程:

  1. 标记阶段,不断循环进行
  2. Evacuation phase:该阶段是把region中一部分活的对象拷贝到空的region中,回收原本的region空间.该阶段是SWT的.

特点:

  1. 收集尽可能多的垃圾,不是一次性回收所有的垃圾
  2. 将内存划分为多个大小相等内存分区
  3. 属于分代收集器,年轻代和老年代都会回收
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值