JAVA核心筆記(一)JVM圖解

就是想貼一下最近畫的幾張思維導圖~

一、簡介

在這裏插入圖片描述

二、運行機制

在這裏插入圖片描述
1、編譯器將JAVA源文件編譯成了.Class字節碼文件;
2、.Class文件被JVM中的類加載子系統加載到JVM中;
3、JVM中有個叫執行引擎的東東,它包括兩個部分,一個是即時編譯器,一個是垃圾回收器。
即時編譯器將.Class字節碼文件編譯成機器碼
PS:Java能夠跨平臺的原因就在這裏~
JVM中對應不同的操作系統(Windows、Mac、Linux)有不同的即時編譯器,編譯成的機器碼可以在不同的操作系統上運行。

每種操作系統的解釋器都是不同的,但基於解釋器實現的虛擬機是相同的。

垃圾回收器可以回收JVM運行過程中不再使用的對象;
4、機器碼通過JVM中的本地接口庫,去調用操作系統中的本地方法庫完成具體的指令操作。
在這裏插入圖片描述

三、JVM的內存區域

在這裏插入圖片描述
線程私有區域:生命週期與線程相同
隨線程啓動而創建,隨線程結束而銷燬

線程共享區域:生命週期與虛擬機相同
隨虛擬機啓動而創建,隨虛擬機結束而銷燬

直接內存:又稱堆外內存
Java進程可以通過堆外內存技術避免在Java堆和Native堆中來回複製數據帶來的資源佔用和性能消耗。
在高併發應用場景下被廣泛使用(Netty、Flink、HBase、Hadoop都有用到)

(一)程序計數器

程序計數器是一塊較小的內存空間,
是《JAVA虛擬機規範》中唯一沒有規定任何OutOfMemeoryError情況的區域。

回顧一下前面畫的運行機制圖,程序計數器是屬於數據區,是JVM運行時產生的。
程序計數器可以看作是當前線程所執行的字節碼的行號指示器。
什麼意思呢?
—JVM將字節碼文件翻譯成不同操作系統的機器碼的時候,字節碼解釋器就是通過改變這個計數器的值,來選取下一條需要執行的字節碼指令。
這個計數器記錄的就是實時虛擬機字節碼指令的地址。

JAVA虛擬機是通過線程輪流切換、分配處理器執行時間的方式來實現的。
所以任何一個確定的時刻、一個處理器只會執行一條線程中的指令。
因此,爲了線程切換後能恢復到正確的執行位置,
每條運行中的線程都有一個獨立的程序計數器。

未完待續~珍惜頭髮,早睡早起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章