【JVM】深入理解虛擬機(上)

想要學好Java,對Java虛擬機的學習是不可或缺的,本文就來初步的介紹一下虛擬機,瞭解虛擬機到底是什麼樣的存在
在這裏插入圖片描述
二話不說先上圖
在這裏插入圖片描述

概念解釋

自動內存管理機制:Java講內存控制的權力交給了虛擬機,由虛擬機來解決編碼時所需的內存管理需求,從而實現內存管理自動化的機制。這個機制也是程序一旦出現內存泄漏和溢出的問題時,平時不瞭解虛擬機的程序員,排查錯誤將異常困難。

虛擬機執行子系統:
執行子系統是虛擬機必不可少的一部分,其過程由編譯class文件、類加載過程、虛擬機字節碼執行引擎組成。

程序編譯和優化: java程序從源碼編譯成字節碼,再從字節碼編譯成本地機器碼即傳統編譯器的編譯過程,優化也是從這兩個部分開始的。

高效併發: java天生適合多線程,高效併發是JVM學習的重要部分

什麼是JVM

虛擬機
首先說說什麼是虛擬機吧,虛擬機(Virtual Machine)就是一臺虛擬的主機,實質上是一款軟件,可以用來執行一系列虛擬計算機執行,分爲系統虛擬機和程序虛擬機,而Java虛擬機就屬於程序虛擬機,它專門爲執行單個計算機程序而設計

Java虛擬機
Java虛擬機是一臺執行Java字節碼的虛擬計算機,他擁有獨立的運行機制,其中運行的Java字節碼也不一定是有Java編譯

JVM平臺的各種語言都可以共享JVM的福利,現在java虛擬機已經不再爲java一家服務。

Java技術的核心就是Java虛擬機,所有java程序都運行在java虛擬機內部

JVM內存結構

根據JVM規範,JVM內存共分爲虛擬機棧、堆、方法區、程序計數器、本地方法棧五個部分

  1. 虛擬機棧
    線程私有,每個方法在執行的時候會創建一個棧幀,存儲了局部變量表,操作數棧,動態鏈接,方法返回地址等


  2. 線程共享,被所有線程共享的一塊內存區域,在虛擬機啓動時創建,用於存放對象實例

  3. 方法區
    線程共享;被所有線程共享的一塊內存區域,用於存儲已被虛擬機加載的類信息,常量,靜態變量等。

  4. 程序計數器
    線程私有,使當前線程所執行的字節碼的行號指示器,每條線程都要有一個獨立的程序計數器,這類內存也被稱爲線程私有的內存

  5. 本地方法棧
    線程私有,主要爲虛擬機使用到的Native方法服務。

JVM運行過程

在這裏插入圖片描述
由編譯的xxx.java源碼通過Java編譯器的詞法分析、語法分析、語義分析、字節碼生成器等過程生成xxx.class字節碼文件,然後通過類加載器從文件系統或網絡中加載Class文件,通過一系列諸如驗證、初始化等過程,存放到內存中的方法區,由虛擬機字節碼執行引擎執行代碼,輸入字節碼文件,通過字節碼解析輸出執行結果。

本文主要參考該書:
在這裏插入圖片描述
另:本文有些內容屬於JDK1.7,在jdk1.8中,常量池已經挪到了堆中,請注意。

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