JVM集合-JVM整體結構(記憶體結構)
我們先來看一下JVM的整體架構圖:
該圖就是JVM的整體架構圖,現在來講解一下每一個部分的功能是做什麼的:
1:class file就是我們虛擬機器編譯出來的位元組碼檔案,這裡不詳細說
2:類裝載子系統: (後文會配上圖文解說類載入子系統的各個階段:載入階段、連結階段、初始化階段)
1).類載入器子系統負責從檔案系統或者網路中載入Class檔案,class檔案在檔案開頭有特定的檔案標識。
2).ClassLoader只負責class檔案的載入,至於它是否可以執行,則由ExecutionEngine決定。
3:方法區(永久代):執行緒共享,儲存已經被虛擬機器載入的類資訊、常量、靜態變數
4:堆(是jvm中最大的一塊由年輕代和老年代組成)
這裡拓展一下堆的引數設定(主要用於jvm引數調優,後面會有專門的文章介紹--》傳送門)
堆記憶體的設定:
-Xms:設定堆的最小空間大小
-Xmx:設定堆的最大空間大小
-XX:NewSize 設定新生代最小空間大小
-XX:MaxNewSize:設定新生代最大空間大小
-XX:PermSize 設定永久代最小空間大小
-XX:MaxPermSize 設定永久代最大空間大小
-Xss 設定每個執行緒的堆疊大小
沒有直接設定老年代的引數,但是可以設定堆空間大小和新生代空間大小兩個引數來間接控 制:老年代空間大小=堆空間大小-年輕代大空間大小
5:java棧(垃圾收集器管理的主要區域(GC堆)):
- 區域性變量表-儲存方法引數,內部使用的變數
- 運算元棧-在變數進行儲存時,需要進行入棧和出棧
- 動態連線-引用型別的指標
- 方法出口-方法的返回
6:本地方法棧
7:程式計數器:(作用:決定執行下一行程式碼)
舉個例子:程式碼是一條一條的往下執行的,這個時候就是程式計數器;JVM就是通過讀取程式計數器的值來決定下一條需要執行的位元組碼指令,進而進行選擇語句、迴圈、異常處理等
8:執行引擎(會有轉門一片內容講解--》傳送門 ):程式碼正真執行的地方
9:本地方法介面:融合不同的程式語言為java所用
10:本地方法庫:本質就是為了融合非JAVA