推導JVM內存模型存在的必要性

1. JVM內存模型:

在這裏插入圖片描述

2. JVM內存模型推導設計過程:

2.1.結構一:

每經歷一次yong GC或者minor GC存活下來的對象age+=1。當age=15時進入老年區。
提升掃描效率:
在這裏插入圖片描述web

產生矛盾:經歷一次yong GC或者minor GC後內存會形成不連續,也就是咱們說的內存碎片多,因此當建立一個很是大的新的對象時就會找不到連續的內存空間裝下(觸發yong GC或者minor GC)。svg

2.2.結構二:

解決矛盾:
劃分爲eden區和s區。
在這裏插入圖片描述
分析:在每一次經歷yong GC或者minor GC後存活的對象都會進入s區,而且在s區是排好順序的,這樣eden區就有足夠的連續的空間留給新的大的對象了。
在這裏插入圖片描述
在這裏插入圖片描述
產生矛盾:每經歷一次yong GC或者minor GC後s區的對象也會被回收,這時在s區也會產生碎片,從eden區進來的對象可能太大而找不到連續的空間裝下。
在這裏插入圖片描述操作系統

2.3.結構三:

解決矛盾:
將s區分爲s0區和s1區。
分析:每經歷一次yong GC或者minor GC後在s0/s1區的對象就會複製進入s1/s0區,同時在進入s1/s0區後是排序的,所以經歷yong GC或者minor GC後從eden區存活的對象就會有足夠的連續的空間裝下了。
在這裏插入圖片描述線程

3.擔保機制:

緣由:新生代不夠用。
在這裏插入圖片描述設計

4.新想法:爲何新生代的eden區:s0:s1=8:1:1,而不是4:3:3(讓eden區佔比少一點)?

緣由:eden區佔比少,建立新對象因內存不太夠而致使裝不下,就會觸發young GC回收對象,這樣就會浪費咱們的對象,同時,頻繁的GC會佔用操做系統線程資源,由於要遍歷咱們的young區。xml

5.老年代GC:

在這裏插入圖片描述

6.Gc流程圖:

在這裏插入圖片描述