GC

 

  • 如何判断对象可回收?

1 引用计数器  循环引用问题

对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不可能再被使用的。

2 根搜索  

GCRoots为起始,向下开始搜索,走过路径为reference chain。当一个对象到GC Roots没有任何引用链相连,即从GC Roots到这个对象不可达,则证明此对象是不可用的。

单条引用路径可及性判断:在这条路径中,最弱的一个引用决定对象的可及性。
多条引用路径可及性判断:几条路径中,最强的一条的引用决定对象的可及性。
  • 如何清理?
1 标记-清除算法,先标记那些要被回收的对象,然后进行清理,简单可行
①标记清除效率低,因为要一个一个标记和清除
②造成大量不连续的内存碎片,空间碎片太多可能会导致当程序在以后的运行过程中需要分配较大对象的时候无法找到足够的连续内存而不得不触发另一次垃圾收集动作。
2 分代复制收集算法:将可用内存按照容量分为大小相等的两块,每次只是使用其中的一块。当这一块的内存用完了,就将可用内存中存活的对象放到另一块。
移动堆顶指针,按序分配。
3 增量垃圾回收

  • 那些对象可以作为GC Roots?

虚拟机栈(栈帧中的本地变量表)中的引用的对象
方法区中的类静态属性引用的对象
方法区中的常量引用的对象
本地方法栈中JNI(Native方法)的引用对象

  • heap中不同区域化分

- 伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。 
- 幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。 
- 终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。

  • 参数
  • -Xms / -Xmx — 堆的初始大小 / 堆的最大大小
  • -Xmn — 堆中年轻代的大小
  • -XX:-DisableExplicitGC — 让System.gc()不产生任何作用
  • -XX:+PrintGCDetails — 打印GC的细节
  • -XX:+PrintGCDateStamps — 打印GC操作的时间戳
  • -XX:NewSize / XX:MaxNewSize — 设置新生代大小/新生代最大大小
  • -XX:NewRatio — 可以设置老生代和新生代的比例
  • -XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布
  • -XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老年代阀值的初始值和最大值
  • -XX:TargetSurvivorRatio:设置幸存区的目标使用率

 

  • 引用

1 强  

引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。

如果想中断强引用和某个对象之间的关联,可以显示地将引用赋值为null,JVM在合适的时间就会回收该对象。

Object object =new Object();
String str ="hello";
 
2 软 softreference

如果内存空间不足了,就会回收这些对象的内存。用来实现内存敏感的高速缓存,比如网页缓存、图片缓存等。

使用软引用能防止内存泄露,增强程序的健壮性。   

在回收前,SoftReference类的get()方法返回Java对象的强引用。一旦垃圾线程回收该Java对象之 后,get()方法将返回null。

3 弱 weakreference

非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。

4 虚

如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。

 

  •  如何利用软引用和弱引用解决OOM问题

假如有一个应用需要读取大量的本地图片,如果每次读取图片都从硬盘读取,则会严重影响性能,但是如果全部加载到内存当中,又有可能造成内存溢出,此时使用软引用可以解决这个问题。

设计思路是:用一个HashMap来保存图片的路径 和 相应图片对象关联的软引用之间的映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效地避免了OOM的问题。在Android开发中对于大量图片下载会经常用到。

 

 

 

 

 

REFERENCE http://blog.csdn.net/u014086926/article/details/52106589

 

posted on 2017-10-15 06:24  satyrs  阅读(158)  评论(0编辑  收藏  举报

导航