三張圖片簡單理清JVM記憶體佈局和GC演算法

1。java的記憶體佈局:

三張圖片簡單理清JVM記憶體佈局和GC演算法

我們要重點關注是堆和虛擬機器棧。Student stu=new Student(); 這裡面stu叫引用,是放在虛擬機器棧上的,stu = new Student();叫stu引用指向了堆記憶體的一個空間。 棧是執行緒私有的,堆是執行緒共享的。

2。JVM堆記憶體以及常用的調優引數:

三張圖片簡單理清JVM記憶體佈局和GC演算法

堆分成了老年代和年輕代,年輕代又分成了伊甸區(new的時候就是放在這個位置)和倖存區。回收演算法我們重點關注分代收集演算法。演算法過程是這樣的,第一次回收時,Eden區不夠了,將Eden還不能被回收的,全部移到from區,結束。等Eden又不夠,進行第二次回收,同樣的將Eden還不能回收的移動到to區,然後把from區的也移動到to區。第三次同樣倖存的都移動到from區,第n次。。。。。,一個物件每移動1次它的年齡就會+1,等到了15歲,就把這個物件移動到老年代了。隨著老年代的物件越來越多,就會進行fullGC,會回收整個堆區。

Minor GC=對年輕代進行GC。 Major GC=對老年代進行GC 。Full GC=Minor GC+ Major GC。

3:GC演算法的應用,不同的位置會有不同的GC演算法。

三張圖片簡單理清JVM記憶體佈局和GC演算法