【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存
文章目錄
- 一、JDK 體系結(jié)構(gòu)
- 二、Java 源碼運(yùn)行原理
- 三、Java 虛擬機(jī)內(nèi)存結(jié)構(gòu)
一、JDK 體系結(jié)構(gòu)
JDK 體系結(jié)構(gòu) : 下圖所有的內(nèi)容都是 JDK 體系中的組成元素 ;
Java Language : 最上層是 Java 語(yǔ)言 ;
Tools & Tool APIs : 指令工具集 , 手動(dòng)編譯 Java 源碼時(shí)會(huì)用到 , 如 java 執(zhí)行字節(jié)碼程序 , javac 編譯字節(jié)碼程序 , javadoc 生成 Java 文檔 ;
JRE : 橙色部分以下的都是 JRE 運(yùn)行環(huán)境 ;
Java Virtual Machine : Java 運(yùn)行最重要的基礎(chǔ)是 Java 虛擬機(jī) , 也就是下圖最底層的 " Java Virtual Machine " , 這是 Java 代碼一次編譯 , 到處運(yùn)行的基礎(chǔ) , Java 程序?qū)嶋H上是運(yùn)行在虛擬機(jī)上的 ;
二、Java 源碼運(yùn)行原理
Java 源碼運(yùn)行原理 :
編寫一個(gè) HelloWorld.java ,
public class HelloWorld{public static void main(String[] args) {System.out.println("Hello World");} }使用 Javac 命令編譯上述源碼 ,
javac HelloWorld.java得到 HelloWorld.class 字節(jié)碼文件 ,
使用 java 命令執(zhí)行上述字節(jié)碼文件 , 將字節(jié)碼文件裝載到 Java 虛擬機(jī) 中 ,
java HelloWorldJava 虛擬機(jī)是使用 軟件 模擬 完整硬件系統(tǒng)功能 , 這是一個(gè)完全隔離環(huán)境的完整的計(jì)算機(jī)系統(tǒng) ,
- 如果當(dāng)前系統(tǒng)是 WIndows 操作系統(tǒng) , Java 虛擬機(jī)會(huì)將字節(jié)碼文件轉(zhuǎn)為 Windows 機(jī)器碼 , 在 Windows 系統(tǒng)中運(yùn)行 ;
- 如果當(dāng)前系統(tǒng)是 Linux 操作系統(tǒng) , Java 虛擬機(jī)會(huì)將字節(jié)碼文件轉(zhuǎn)為 Linux 機(jī)器碼 , 在 Linux 系統(tǒng)中運(yùn)行 ;
在不同的操作系統(tǒng)中 , Java 虛擬機(jī)的底層實(shí)現(xiàn)是不同的 ;
三、Java 虛擬機(jī)內(nèi)存結(jié)構(gòu)
使用 java 命令 , 將 HelloWorld.class 字節(jié)碼裝載到 Java 虛擬機(jī)之后 ,
java HelloWorld.class先通過(guò) " 類裝載子系統(tǒng) " 加載字節(jié)碼文件 , 使用類加載器將 class 文件裝載到 Java 虛擬機(jī) 內(nèi)存中 ;
Java 虛擬機(jī)內(nèi)存 模型 就是 運(yùn)行時(shí)數(shù)據(jù)區(qū) , 這部分內(nèi)存可劃分為以下 555 個(gè)區(qū)域 :
- 堆區(qū) : 對(duì)象創(chuàng)建好之后都放在堆內(nèi)存中 ;
- 方法區(qū) ( 元空間 ) ;
- 棧 ( 線程棧 | 線程私有 ) : 存放線程運(yùn)行的局部變量數(shù)據(jù) , 是線程私有的控件
- 本地方法棧 ( 線程私有 ) : 本地方法棧 存放的是 Jni 調(diào)用中 , C/C++ 的方法棧 ;
- 程序計(jì)數(shù)器 ( 線程私有 ) ;
堆區(qū) 和 方法區(qū) ( 元空間 ) 是所有線程 共享的區(qū)域 ;
棧 ( 線程棧 ) , 本地方法棧 , 程序計(jì)數(shù)器 是 線程私有的區(qū)域 ;
總結(jié)
以上是生活随笔為你收集整理的【Java 虚拟机原理】JDK 体系结构 | Java 源码运行原理 | Java 虚拟机内存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Flutter】屏幕像素适配方案 (
- 下一篇: 【Java 虚拟机原理】线程栈 | 栈帧