Java GC 原理

 内存的分配和释放,典型的做法有

1.全人工,也就是调用malloc/free,new/delete这些完全靠程序员,当然这样开发的程序很容易出现bug

2.引用计数,对每个分配的对象增加一个引用计数器,这样带来的问题是内存额外开销,增加减少引用时的计算开销,特别在多线程时的加锁,而且还有循环引用的问题。

3.标记清除,也就是Java GC采用的方式,通过判断有向图中每个节点是否能与根节点相通来对对象进行标记回收。这种方式通过一个独立的GC线程来判断对象在有向图中与根节点的可达状态,然后再进行清除。

Java GC的时机是由系统算法自身决定,或者说不可准确预测,即使是调用了System.gc().被释放的对象会根据大小,生成时间,程序内存使用情况等,触发不同的GC条件,进而用不同的GC方式(minor gc / full gc)释放。

posted @ 2016-07-11 14:38  goooon  阅读(219)  评论(0编辑  收藏  举报