JVM--垃圾收集器,與內存配分策略

哪些內存須要回收?html

程序計數器,虛擬機棧,本地方法棧,這3個區域隨線程而生,隨線程而滅。這也是爲何,逃逸分析技術,能幫助虛擬機減小GC次數(肯定域中的類,能夠在棧上建立實例),優化代碼,提升性能。java

須要回收的內存,主要是堆,方法區(線程共享的區域)。堆分爲新生代(1/3),老年代(2/3),新生代下又分爲Eden(8/10),s1(1/10),s2(1/10)。方法區,存放類信息,也被稱爲永久代。web

要作回收,首先要判斷,對象是否存活。算法

目前是提供了這兩種算法,不排除,之後不會有新的算法:tomcat

 1.引用計數算法:引用計數放法,簡單有效,可是很難解決對象之間相互循環引用的問題。安全

 2.可達性分析算法:經過GC Roots 的對象做爲起始點。當一個對象到GC Roots沒有任何引用鏈相連,則證實此對象不可用。(經過OopMap,快速選擇GC Roots,而oopmap 是在類加載完成的時候,虛擬機把對象內什麼偏移量上是什麼類型的數據計算出來。而oopMap的生成,只在安全點生成。安全點的選擇,是以程序,是否具備讓程序長時間執行的特徵,我理解的,相對停留久的地方生成oop)多線程

 

當能判斷對象,是否存活後。就將他們回收,JVM提供了3中回收對象的算法併發

 1.標記,清除。將須要回收的對象,標記。而後清除。這樣作,會產生空間碎片(邏輯上),而當須要申請內存時,沒有連續的邏輯空間,可供申請。eclipse

 2.複製。將內存分爲兩塊兒,一樣須要標記。內存快使用完時,將標記還存活的對象,複雜到另外一塊內存區域。剩下內存,統一回收掉。jvm

 3.標記,整理。一樣時標記,可是將標記的須要回收內存,向一端移動。清理邊界之外的內存

 

接下來

垃圾收集器,目前一共7中垃圾收集器。3種(Serial,ParNew,Parallel Scavenge),應用於新生代垃圾回收;3種(CMS,Serial old ,Paralel old)用於老年代的垃圾回收。最後一個G1收集器,既能針對於新生代,也能回收老年代。

瞭解垃圾收集器以前,應該先了解。並行和併發

並行:垃圾收集線程工做。應用線程等待。

併發:垃圾收集線程,應用線程,同時執行(併發執行。)

1.Serial 收集器:單線程收集器。主要時JDK1.3.1以前的收集器。如今已經不使用了。簡單高效,適合運行在Client模式下

2.ParNew收集器::多線程收集器,能和CMS收集器搭配使用。(新生代,老年代收集器,並非全部都能搭配使用)。

3.Parallel Scavenge收集器:關注儘量縮短垃圾收集時,用戶線程停頓時間,達到可控制的吞吐量。(和Parale old 搭配使用,時目前Jdk1.7,1.8的默認配置)

4.Serial old:一樣是單線程收集器(標記,整理算法)

5.Parallel Old:多線程收集器(標記,整理算法)

6.CMS收集器:是一種獲取最短回收停頓時間爲目標的收集器。適合互聯網,或者B/S系統服務端上。

7.G1收集器:每次根據容許的收集時間,優先回收價值最大的region。(jdk1.9默認配置)

CMS收集器和G1收集器,相對來講複雜不少。大體分爲:初始標記,併發標記,再次標記,回收。

 

說完完收集器。即是內存分配策略,和回收策略。

1.對象是優先在eden分配,沒有足夠空間時,執行Minor GC.(空間分配擔保)

2.大對象直接在老年代分配。(大對象爲何直接存放老年代呢?就由於老年代空間大?放老年代,不是會執行full gc嘛?)

3.長期存活的對象進入老年代。

4.動態對象年齡斷定。(若是在survivor空間相同年齡多有對象大小的總和大於survivor空間的一半,則升到老年代)。

 

最後一個,就是如何查看,jvm版本信息。以及如何配置jvm內存;

配置jvm內存:

1.直接經過去執行class文件的時候,也能夠設置JVM參數,eg : java -Xms512m -Xmx1024m HelloWorld
在cmd中設置,也必須是執行java命令時

堆棧是JVM分配的,通常涉及的時候都是啓動JVM時。
2.eclipse能夠在eclipse.ini 配置文件中設置,也能夠在eclipse執行一個java類時,經過右鍵的參數添加部分去設置。
3.通常的像tomcat,weblogic這些web容器,都是應用jvm啓動的,因此在他們的啓動腳本中都會去調用JVM,就能夠在他們的啓動腳本中設置堆棧的大小。

查看JVM配置:
 1.java -XX:+PrintFlagsFinal -version | grep :

 2.java -XX:+PrintCommandLineFlags -version

參考:https://www.cnblogs.com/pc-bo...

          https://www.cnblogs.com/parry...

相關文章
相關標籤/搜索