说到JVM,GC(垃圾回收)是非常重要的机制。

那么首先的问题是:

GC在什么时候会发生?

GC的触发包括两种情况:1.程序调用System.gc()的时候。2.系统自身决定是否需要GC。

系统进行GC的依据:1.eden区满会触发 Minor GC。

2.FULL GC的触发条件:

(1)调用System.gc时,系统建议执行Full GC,但是不必然执行。

(2)老年代内存不足的时候。

(3)方法区内存不足的时候。

第二个问题:GC的对象是什么?

如何判断一个对象会被GC,在JVM中采用的可达性算法。从GC ROOT 出发,如果该对象不可达。则会对该对象进行调用finalize()方法进行释放。

对GC Root搜索不到的对象,可能并不会立即GC,至少需要对该对象进行两次标记。

第三个问题:如何GC。GC的算法大致有四种:标记-清除、复制、标记-整理、分代。整体采用分代算法,

对于新生代,采取的是复制算法。对于老年代采取标记-清除或者标记整理。

疑问:如何优化?优化的方向有些?这些以后会逐渐补充。

 

posted on 2017-05-19 20:10  知己一生  阅读(1284)  评论(0编辑  收藏  举报