解讀JDK、JRE、JVM的區(qū)別與聯(lián)系
一、jdk
JDK(Java Development Kit):
jdk是Java的開發(fā)工具包,是整個java開發(fā)的核心。
其中主要包含了三方面的內容:
- Java程序的運行環(huán)境-JRE
- Java的基礎類庫(Java API)
Java API是Java的應用程序接口,里面有很多已經寫好的Java class,包含一些重要的語法結構和基本的線程、圖形和IO等。
我們可以直接拿來使用。
Java的一些工具包(其中包含了javac源碼編譯器,還有一些其他的命令:jdb,javah,jmp等)。
在學習java之前,一般都是安裝運行環(huán)境,下載一個JDK。在jdk中有很多的文件,其中最主要的就是四個文件:bin、include、jre、lib。

- bin:bin目錄下有大量的可運行exe文件,其中最主要的就是javac.exe文件,源碼編譯器。
- include:包含一些頭文件,用于java和JVM進行交互。
- lib:類庫。
- jre:java程序運行環(huán)境。
在jre目錄底下,還有一個bin文件和lib文件,這兩個文件與之前的不同,這里的bin文件可以認為就是jvm,lib文件就是jvm運行時需要的類庫。
JVM+ lib庫=JRE。
二、jre
JRE(Java Runtime Environment—java運行環(huán)境):
jre是java程序的運行環(huán)境,所有的Java程序必須依賴jre才能運行。jre中包含jvm,但是只有jvm是不能完全解釋字節(jié)碼文件的,還需要一些核心的類庫。
這些類庫都存放在jre目錄底下的lib文件中。所以jre就包括了兩部分:解釋字節(jié)碼的jvm+一些核心類庫(存放于lib文件中)
三、jvm
JVM(Java Virtual Machine–java虛擬機):
jvm是jre的一部分,jvm是虛擬出的一臺計算機,這臺計算機不關心java源代碼如何寫的,它只關心java源程序編譯出的字節(jié)碼文件,jvm是java程序能實現(xiàn)跨平臺的核心,它不關心真實計算機,也不關心操作系統(tǒng)等等,就像一個中間平臺,只負責將字節(jié)碼文件轉換成當前計算機能理解的CPU指令集或系統(tǒng)調用。
jvm有自己完善的硬件架構,如處理器、棧區(qū)、寄存器等。
總結:jvm是一個虛擬的中間平臺,只負責將編譯后的字節(jié)碼文件轉換成當前計算機能理解并執(zhí)行的指令,其他都不關心。jvm是java“一次編譯,到處執(zhí)行”的原因。
四、關系圖

五、一個Java程序的執(zhí)行過程
- 我們利用JDK(通過調用一些Java API)寫出java源程序,然后儲存在.java文件中。
- JDK中的源碼編譯器javac將源代碼編譯成java字節(jié)碼,儲存在.class文件中。
- JRE加載、驗證、執(zhí)行Java字節(jié)碼。
- JVM將字節(jié)碼文件解析為機器碼映射到CPU指令集或者供系統(tǒng)調用。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
基于java下載中getContentLength()一直為-1的一些思路
下面小編就為大家?guī)硪黄趈ava下載中getContentLength()一直為-1的一些思路。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Java開發(fā)之內部類對象的創(chuàng)建及hook機制分析
這篇文章主要介紹了Java開發(fā)之內部類對象的創(chuàng)建及hook機制,結合實例形式分析了java基于hook機制內部類對象的創(chuàng)建與使用,需要的朋友可以參考下2018-01-01
SpringBoot中忽略實體類中的某個屬性不返回給前端的方法(示例詳解)
本文介紹了在Spring Boot中使用Jackson和Fastjson忽略實體類屬性不返回給前端的方法,在Jackson中,同時使用@JsonProperty和@JsonIgnore時,@JsonIgnore可能失效,Fastjson中可以使用@JSONField(serialize=false)來實現(xiàn),本文結合實例代碼介紹的非常詳細,需要的朋友參考下吧2024-11-11

