JVM
JVM(Java 虛拟機),是一種用于計算裝置的規範,是一個虛構出來的計算機,通過在實際的計算機上仿真模拟各種計算功能來實作,引入 JVM 後,Java 語言在不同平台上運作時不需要重新編譯,它屏蔽了與具體平台相關的資訊,使得 Java 程式隻需生成在 JVM 上運作的位元組碼檔案,就可以在多種平台上不加修改的運作
JVM 基本結構
首先,JVM 分為線程共享區和線程獨占區兩部分,線程共享區即線程公有,可以所有線程共享,向下分為方法區和 Java 堆,線程獨占區即線程私有,向下分為虛拟機棧、本地方法棧以及一會會詳細介紹的程式計數器
具體結構如圖:

JVM 程式計數器
程式計數器是一個記錄着目前線程所執行到的位元組碼行号
程式計數器的特點
- 線程隔離,每個線程工作室都有屬于自己的獨立計數器
- 執行 Java 方法時,程式計數器是有值的,且記錄的是正在執行的位元組碼指令的位址
- 執行本地方法時,程式計數器的值為空(Undefined),因為 native 方法時 java 通過 JNI(Java 本地接口)直接調用本地的 C/C++ 庫,由于此方法是通過 C/C++ 實作的,無法生成位元組碼檔案,是以其在執行時記憶體的配置設定不是由 JVM 決定的
- 程式計數器占用的記憶體很小,在進行 JVM 記憶體計算時,可以忽略
- 另外,JVM 中隻有程式計數器沒有規定任何 OutOfMemoryError