'深入理解Java虛擬機---學習感悟以及筆記'

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
深入理解Java虛擬機---學習感悟以及筆記



按分區對待可分為:增量收集算法,分代收集算法。

  • 增量收集:實時垃圾回收算法,即:在應用進行的同時進行垃圾回收,理論上可以解決傳統分代方式帶來的問題。增量收集把對堆空間劃分成一系列內存塊,使用時先使用其中一部分,垃圾收集時把之前用掉的部分中的存活對象再放到後面沒有用的空間中,這樣可以實現一直邊使用邊收集的效果,避免了傳統分代方式整個使用完了再暫停的回收的情況。
  • 分代收集:(商用默認)基於對象生命週期劃分為新生代、老年代、元空間,對不同生命週期的對象使用不同的算法進行回收。
"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
深入理解Java虛擬機---學習感悟以及筆記



按分區對待可分為:增量收集算法,分代收集算法。

  • 增量收集:實時垃圾回收算法,即:在應用進行的同時進行垃圾回收,理論上可以解決傳統分代方式帶來的問題。增量收集把對堆空間劃分成一系列內存塊,使用時先使用其中一部分,垃圾收集時把之前用掉的部分中的存活對象再放到後面沒有用的空間中,這樣可以實現一直邊使用邊收集的效果,避免了傳統分代方式整個使用完了再暫停的回收的情況。
  • 分代收集:(商用默認)基於對象生命週期劃分為新生代、老年代、元空間,對不同生命週期的對象使用不同的算法進行回收。
深入理解Java虛擬機---學習感悟以及筆記



按系統線程可分為:串行收集算法,並行收集算法,併發收集算法。

  • 1.串行收集:使用單線程處理垃圾回收工作,實現容易,效率較高。不足之處:1.無法發揮多處理器的優勢 2.需要暫停用戶線程
  • 2.並行收集:使用多線程處理垃圾回收工作,速度快,效率高。理論上CPU數目越多,越能體現出並行收集器的優勢。不足之處:需要暫停用戶線程
  • 3.併發收集:垃圾線程與用戶線程同時工作。系統在垃圾回收時不需要暫停用戶線程


GC收集器常用組合

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
深入理解Java虛擬機---學習感悟以及筆記



按分區對待可分為:增量收集算法,分代收集算法。

  • 增量收集:實時垃圾回收算法,即:在應用進行的同時進行垃圾回收,理論上可以解決傳統分代方式帶來的問題。增量收集把對堆空間劃分成一系列內存塊,使用時先使用其中一部分,垃圾收集時把之前用掉的部分中的存活對象再放到後面沒有用的空間中,這樣可以實現一直邊使用邊收集的效果,避免了傳統分代方式整個使用完了再暫停的回收的情況。
  • 分代收集:(商用默認)基於對象生命週期劃分為新生代、老年代、元空間,對不同生命週期的對象使用不同的算法進行回收。
深入理解Java虛擬機---學習感悟以及筆記



按系統線程可分為:串行收集算法,並行收集算法,併發收集算法。

  • 1.串行收集:使用單線程處理垃圾回收工作,實現容易,效率較高。不足之處:1.無法發揮多處理器的優勢 2.需要暫停用戶線程
  • 2.並行收集:使用多線程處理垃圾回收工作,速度快,效率高。理論上CPU數目越多,越能體現出並行收集器的優勢。不足之處:需要暫停用戶線程
  • 3.併發收集:垃圾線程與用戶線程同時工作。系統在垃圾回收時不需要暫停用戶線程


GC收集器常用組合

深入理解Java虛擬機---學習感悟以及筆記


"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
深入理解Java虛擬機---學習感悟以及筆記



按分區對待可分為:增量收集算法,分代收集算法。

  • 增量收集:實時垃圾回收算法,即:在應用進行的同時進行垃圾回收,理論上可以解決傳統分代方式帶來的問題。增量收集把對堆空間劃分成一系列內存塊,使用時先使用其中一部分,垃圾收集時把之前用掉的部分中的存活對象再放到後面沒有用的空間中,這樣可以實現一直邊使用邊收集的效果,避免了傳統分代方式整個使用完了再暫停的回收的情況。
  • 分代收集:(商用默認)基於對象生命週期劃分為新生代、老年代、元空間,對不同生命週期的對象使用不同的算法進行回收。
深入理解Java虛擬機---學習感悟以及筆記



按系統線程可分為:串行收集算法,並行收集算法,併發收集算法。

  • 1.串行收集:使用單線程處理垃圾回收工作,實現容易,效率較高。不足之處:1.無法發揮多處理器的優勢 2.需要暫停用戶線程
  • 2.並行收集:使用多線程處理垃圾回收工作,速度快,效率高。理論上CPU數目越多,越能體現出並行收集器的優勢。不足之處:需要暫停用戶線程
  • 3.併發收集:垃圾線程與用戶線程同時工作。系統在垃圾回收時不需要暫停用戶線程


GC收集器常用組合

深入理解Java虛擬機---學習感悟以及筆記


深入理解Java虛擬機---學習感悟以及筆記


JVM性能調優思路

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
深入理解Java虛擬機---學習感悟以及筆記



按分區對待可分為:增量收集算法,分代收集算法。

  • 增量收集:實時垃圾回收算法,即:在應用進行的同時進行垃圾回收,理論上可以解決傳統分代方式帶來的問題。增量收集把對堆空間劃分成一系列內存塊,使用時先使用其中一部分,垃圾收集時把之前用掉的部分中的存活對象再放到後面沒有用的空間中,這樣可以實現一直邊使用邊收集的效果,避免了傳統分代方式整個使用完了再暫停的回收的情況。
  • 分代收集:(商用默認)基於對象生命週期劃分為新生代、老年代、元空間,對不同生命週期的對象使用不同的算法進行回收。
深入理解Java虛擬機---學習感悟以及筆記



按系統線程可分為:串行收集算法,並行收集算法,併發收集算法。

  • 1.串行收集:使用單線程處理垃圾回收工作,實現容易,效率較高。不足之處:1.無法發揮多處理器的優勢 2.需要暫停用戶線程
  • 2.並行收集:使用多線程處理垃圾回收工作,速度快,效率高。理論上CPU數目越多,越能體現出並行收集器的優勢。不足之處:需要暫停用戶線程
  • 3.併發收集:垃圾線程與用戶線程同時工作。系統在垃圾回收時不需要暫停用戶線程


GC收集器常用組合

深入理解Java虛擬機---學習感悟以及筆記


深入理解Java虛擬機---學習感悟以及筆記


JVM性能調優思路

深入理解Java虛擬機---學習感悟以及筆記


理解GC日誌

"

Java面試那些事兒

# 概念

虛擬機:指以軟件的方式模擬具有完整硬件系統功能、運行在一個完全隔離環境中的完整計算機系統 ,是物理機的軟件實現。常用的虛擬機有VMWare,Visual Box,Java Virtual Machine(Java虛擬機,簡稱JVM)。

Java虛擬機陣營:Sun HotSpot VM、BEA JRockit VM、IBM J9 VM、Azul VM、Apache Harmony、Google Dalvik VM、Microsoft JVM…

# 啟動流程

深入理解Java虛擬機---學習感悟以及筆記


# 基本架構

深入理解Java虛擬機---學習感悟以及筆記


Java運行時編譯源碼(.java)成字節碼,由jre運行。jre由java虛擬機(jvm)實現。Jvm分析字節碼,後解釋並執行。

深入理解Java虛擬機---學習感悟以及筆記


JVM由三個主要的子系統構成:

  • 1.類加載器子系統
  • 2.運行時數據區(內存)
  • 3.執行引擎


# 垃圾收集(GC:Garbage Collection)

1、如何識別垃圾,判定對象是否可被回收?

  • 引用計數法:給每個對象添加一個計數器,當有地方引用該對象時計數器加1,當引用失效時計數器減1。用對象計數器是否為0來判斷對象是否可被回收。缺點:無法解決循環引用的問題
  • 根搜索算法:也稱可達性分析法,通過“GC ROOTs”的對象作為搜索起始點,通過引用向下搜索,所走過的路徑稱為引用鏈。通過對象是否有到達引用鏈的路徑來判斷對象是否可被回收(可作為GC ROOTs的對象:虛擬機棧中引用的對象,方法區中類靜態屬性引用的對象,方法區中常量引用的對象,本地方法棧中JNI引用的對象)


2、Java 中的堆是 GC 收集垃圾的主要區域,GC 分為兩種:Minor GC、Full GC ( 或稱為 Major GC )。

  • Minor GC:新生代(Young Gen)空間不足時觸發收集,由於Java 中的大部分對象通常不需長久存活,新生代是GC收集頻繁區域,所以採用複製算法。
  • Full GC:老年代(Old Gen )空間不足或元空間達到高水位線執行收集動作,由於存放大對象及長久存活下的對象,佔用內存空間大,回收效率低,所以採用標記-清除算法。


# GC算法

按照回收策略劃分為:標記-清除算法,標記-整理算法,複製算法。

  • 標記-清除算法:分為兩階段“標記”和“清除”。首先標記出哪些對象可被回收,在標記完成之後統一回收所有被標記的對象所佔用的內存空間。不足之處:1.無法處理循環引用的問題2.效率不高3.產生大量內存碎片(ps:空間碎片太多可能會導致以後在分配大對象的時候而無法申請到足夠的連續內存空間,導致提前觸發新一輪gc)
深入理解Java虛擬機---學習感悟以及筆記


  • 標記-整理算法:分為兩階段“標記”和“整理”。首先標記出哪些對象可被回收,在標記完成後,將對象向一端移動,然後直接清理掉邊界以外的內存。
深入理解Java虛擬機---學習感悟以及筆記


  • 複製算法:把內存空間劃為兩個相等的區域,每次只使用其中一個區域。gc時遍歷當前使用區域,把正在使用中的對象複製到另外一個區域中。算法每次只處理正在使用中的對象,因此複製成本比較小,同時複製過去以後還能進行相應的內存整理,不會出現“碎片”問題。不足之處:1.內存利用率問題2.在對象存活率較高時,其效率會變低。
深入理解Java虛擬機---學習感悟以及筆記



按分區對待可分為:增量收集算法,分代收集算法。

  • 增量收集:實時垃圾回收算法,即:在應用進行的同時進行垃圾回收,理論上可以解決傳統分代方式帶來的問題。增量收集把對堆空間劃分成一系列內存塊,使用時先使用其中一部分,垃圾收集時把之前用掉的部分中的存活對象再放到後面沒有用的空間中,這樣可以實現一直邊使用邊收集的效果,避免了傳統分代方式整個使用完了再暫停的回收的情況。
  • 分代收集:(商用默認)基於對象生命週期劃分為新生代、老年代、元空間,對不同生命週期的對象使用不同的算法進行回收。
深入理解Java虛擬機---學習感悟以及筆記



按系統線程可分為:串行收集算法,並行收集算法,併發收集算法。

  • 1.串行收集:使用單線程處理垃圾回收工作,實現容易,效率較高。不足之處:1.無法發揮多處理器的優勢 2.需要暫停用戶線程
  • 2.並行收集:使用多線程處理垃圾回收工作,速度快,效率高。理論上CPU數目越多,越能體現出並行收集器的優勢。不足之處:需要暫停用戶線程
  • 3.併發收集:垃圾線程與用戶線程同時工作。系統在垃圾回收時不需要暫停用戶線程


GC收集器常用組合

深入理解Java虛擬機---學習感悟以及筆記


深入理解Java虛擬機---學習感悟以及筆記


JVM性能調優思路

深入理解Java虛擬機---學習感悟以及筆記


理解GC日誌

深入理解Java虛擬機---學習感悟以及筆記



[GC [PSYoungGen: 8192K->1000K(9216K)] 16004K->14604K(29696K), 0.0317424 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
[GC [PSYoungGen: 9192K->1016K(9216K)] 22796K->20780K(29696K), 0.0314567 secs] [Times: user=0.06 sys=0.00, real=0.03 secs]
[Full GC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20435K->20435K(20480K)] 28627K->28627K(29696K), [Metaspace: 8469K->8469K(1056768K)], 0.1307495 secs] [Times: user=0.50 sys=0.00, real=0.13 secs]
[Full GC [PSYoungGen: 8192K->8192K(9216K)] [ParOldGen: 20437K->20437K(20480K)] 28629K->28629K(29696K), [Metaspace: 8469K->8469K(1056768K)], 0.1240311 secs] [Times: user=0.42 sys=0.00, real=0.12 secs]

常見異常

  • StackOverflowError:(棧溢出)
  • OutOfMemoryError: Java heap space(堆空間不足)
  • OutOfMemoryError: GC overhead limit exceeded (GC花費的時間超過 98%, 並且GC回收的內存少於 2%)
"

相關推薦

推薦中...