java中JVM虛擬機內存模型詳細說明

以下是本站小編爲大家收集的java中JVM虛擬機內存模型詳細說明內容,歡迎閱讀學習!

java中JVM虛擬機內存模型詳細說明

  JVM的內部結構如下圖:

java中JVM虛擬機內存模型詳細說明 - 天涯草 - 天涯草

一個優秀Java程序員,必須瞭解Java內存模型、GC工作原理,以及如何優化GC的性能、與GC進行有限的交互,有一些應用程序對性能要求較高,例如嵌入式系統、實時系統等,只有全面提升內存的管理效率,才能提高整個應用程序的性能。

本文將從JVM內存模型、GC工作原理,以及GC的幾個關鍵問題進行探討,從GC角度提高Java程序的性能。

  1 java內存分爲:

程序計數器(當前線程所執行字節碼的行號指示器,字節碼解釋器要通過改變這個計數器的值來選擇下一條字節碼指令,分支、循環、異常處理等。每條線程都有一條獨立的程序計數器,屬於線程私有的內存區)、

java虛擬機棧(也是線私有的,存儲局部變量、操作棧,每個方法執行時創建一個棧幀,執行過程就是棧的出棧入棧操作)、

本地方法棧(執行native方法)、

年輕代堆(eden、from survivor、to survivor)、年老代堆(經過幾次垃圾回收,保存下來的)、

持久代堆(也叫方法區,保存常量池和類型數據信息,不會被回收)、

直接內存(使用native方法直接分配堆外內存,再通過堆內的DirectByteBuffer作爲這塊內存的引用進行操作)

  2 對象訪問有兩種:通過句柄池和直接通過指針,句柄池的好處是垃圾回收後,不需要改變對象引用,只要改變句柄引用;直接指針的好處是效率較高。

引用《深入java虛擬機第二章》

解釋了minor gc和major gc,和兩個survivor區之於複製收集算法的意義

  3 jvm內存機制

java內存中的四種引用解析,強引用、弱引用、軟引用、虛引用