我們都知道,java的gc是基於java的分代前提,不管是CMS還是G1,都是基於分代思想:老年代和新生代 思考一:為什麼可以分代? 1、java中對象的生命周期是不一樣的,在gc中對應年齡的概念。 短命的對象:如方法臨時變數等。 長命的對象:如緩存對象、連接池等。 2、長命對象和短命對象之間的引用 ...
我們都知道,java的gc是基於java的分代前提,不管是CMS還是G1,都是基於分代思想:老年代和新生代
思考一:為什麼可以分代?
1、java中對象的生命周期是不一樣的,在gc中對應年齡的概念。
短命的對象:如方法臨時變數等。
長命的對象:如緩存對象、連接池等。
2、長命對象和短命對象之間的引用關係比較少(很重要)。
思考二:分代的優點是什麼?
從垃圾回收的角度看,可以針對不同的分代採用不同的回收演算法,提升垃圾回收的效率,降低系統stw的時間。
思考三:分代沒有缺點嗎?
假設我們有一個場景的java系統,是不符合思考一的java分代的前提的,那分代的垃圾回收演算法反而會影響系統的性能。(期待能遇到一個這種系統。。。。)
思考四:分代只是為了垃圾回收?
就像第一點提到的,分代服務java對象,而java對象存在分配和回收兩個過程,所以我們需要把對象分配和垃圾回收結合起來考慮分代,能同時提升對象分配和垃圾回收的效率才是分代想達到的目標