GC(浅析)

来源:互联网 发布:淘宝子账户如何认证 编辑:程序博客网 时间:2024/06/05 07:49

工作原理

GC是什么

GC是Garbage
Collection的缩写,是垃圾收集的意思。当创建对象时,Java提供的GC功能可以自动监测这个对象的地址和大小以及使用情况。其采用有向图的方式记录和管理内存中的对象,
当对象的状态为“不可达”时,这个对象符合回收的标准。但是符合回收标准并一定立即就能回收,这是为了保证GC能够在不同平台实现的问题,Java规范对GC的很多行为都没有进行严格的规定。例如,对于采用什么类型的回收算法、什么时候进行回收等重要问题都没有明确的规定。

GC的运行

GC和其它程序一样运行在独立的进程中,只是它的优先级是比较低的。当JVM空闲时,GC开始运行,其它程序挂起,对“不可达”的对象进行标记并回收。这样做的好处就是能够保证GC快速的工作,但是如果需要回收的对象比较多,GC运行时间较长时,用户能够感到Java程序的停顿。如果GC运行时间太短,则可能对象回收率太低,这意味着还有很多应该回收的对象没有被回收,仍然占用大量内存。

工作效率

根据GC运行的特点,在设计GC的时候,就必须在停顿时间和回收率之间进行权衡。如果对内存比较敏感就需要及时触发GC。如果程序不允许有长时间的中断,就需要别的GC算法了,比如GC的高级算法

和GC有限的交互

在java中有四种引用,是对内存管理的进一步优化;

1、强引用

GC: 不回收
这个好理解,如同 Person p=new Person(); 这个新对象被变量P引用,就算内存不足了,GC也不会回收它;如果想要回收这个对象,需要拆掉这个对象的引用:p=null;此时这个对象符合垃圾对象的标准,在GC的时候会对其标注并回收;

2、软引用(SoftReference)

GC:如果内存足够就不回收,内存不足就回收

3、弱引用(WeakReference)

GC:等GC运行的时候就回收掉

4、虚引用(PhantomReference)

GC:随时都可能被回收掉

推荐几个详解的地址:
对象之死
java垃圾回收之Minor GC和Major GC
JVM内存管理及垃圾回收
面试题

0 0