JVM初始
JVM(Java Virtual Machine)常被稱為java虛擬機器,用來將java中的.class檔案進行執行,不同作業系統版本的JDK對應不同的JVM,巨集觀上來說,就是從軟體層面遮蔽不同作業系統在底層硬體與指令上的區別.
將.class檔案在終端視窗利用命令javap -c對程式碼進行反彙編
會得到對應的JVM指令形式的程式 如下
如上表所示,我們會看到程式計數器對每一步都有計數,例如computer()方法中的0~12步;
這裡我們說一下,為什麼JVM中會有程式計數器的存在,假設有多個執行緒在執行,其中一個執行緒A執行到4時,突然有另外一個優先順序更高的執行緒B來執行,當這B執行完後,A因為程式計數器的存在,可以繼續從4開始執行.
上表每一步的JVM指令又分別代表什麼含義呢?
舉個例子(這裡有具體JVM指令手冊,但是我不會上傳!!!):
接下來我們來深入瞭解一下JVM中具體有什麼,他們之間有什麼樣的關聯?
(1)JVM虛擬機器由三部分組成,分別是:類裝載子系統,執行時資料區(記憶體模型)—>最重要的一部分,位元組碼執行引擎;
(2)類裝載子系統用來載入.class;位元組碼執行引擎負責對程式計數器的修改以及.class的執行;
(3)執行時資料區中包括:棧,堆,方法區(元空間),程式計數器,本地方法棧;其中棧,本地方法棧和程式計數器每個執行緒都獨有一份,而堆和元空間是所有執行緒公共的;
(4)棧:想要了解棧,就要對棧幀有所瞭解,棧記憶體中有很多棧幀,一個方法對應一塊棧幀記憶體區域;棧幀中包含四部分:區域性變數表(儲存區域性變數),運算元棧(運算元執行操作過程中臨時存放的空間,類似資料結構中的棧FIFO),動態連結,方法出口(記錄方法執行完,下一步要執行的位置);
(5)方法區(元空間):分為常量區,靜態變數區和類資訊區;
(6)堆:用來儲存物件,棧中的對應區域性變數儲存物件對的地址引用;
如果該物件是通過靜態屬性建立的,那麼對應的方法區中的靜態變數來儲存該物件的地址引用;
(7)本地方法棧:java底層用關鍵字native修飾的方法(這種方法沒有方法體,底層利用c.c++進行修飾);這裡說一下很重要的c和java的區別:C語言記憶體管理需要自己分配和釋放,Java語言由JVM去管理,程式碼開發難度大大減小;
相關文章
- 從jvm角度看懂類初始化、方法過載、重寫。JVM
- JVM類載入機制與類初始化順序JVM
- 從jvm角度看懂類初始化、方法重寫、過載。JVM
- java程式設計——從jvm角度看懂類初始化、方法重寫、過載Java程式設計JVM
- JVM(一)-JVM入門JVM
- 初始xpath
- 初始scrapy
- 初始PythonPython
- 初始dockerDocker
- 初始flaskFlask
- [JAVA] Java 陣列、多維陣列,動態、靜態初始化,陣列JVM記憶體模型分析Java陣列JVM記憶體模型
- 什麼?你們公司還沒有將JVM初始和最大堆記憶體大小設定為相同值?JVM記憶體
- JVMJVM
- [效能][JVM]jvm垃圾回收機制JVM
- JVM系列(一) - JVM總體概述JVM
- JVM系列(三) - JVM物件探祕JVM物件
- JVM系列(六) - JVM垃圾回收器JVM
- JVM系列(六) – JVM垃圾回收器JVM
- 02初始LinuxLinux
- ps初始操作
- 初始node 三
- JVM學習筆記——初識JVMJVM筆記
- [譯]深入理解JVM Understanding JVM InternalsJVM
- JVM效能優化 (一) 初識JVMJVM優化
- JVM(七):JVM記憶體結構JVM記憶體
- JVM系列(三):JVM建立過程解析JVM
- JVM篇-01.什麼是JVMJVM
- 類內初始化、預設初始函式、=default;函式
- JVM - 引用JVM
- JVM 概述JVM
- JVM—01JVM
- JVM(三)JVM
- jvm GraalVMJVMLVM
- 【JVM】模型JVM模型
- JVM系列(七) – JVM線上監控工具JVM
- JVM調優:HotSpot JVM垃圾收集器JVMHotSpot
- JVM系列(七) - JVM線上監控工具JVM
- JVM系列(二) - JVM記憶體區域JVM記憶體