搜尋
首頁JavaJava入門jdk和jre的區別

jdk和jre的區別

May 25, 2020 pm 02:59 PM
jdkjre

jdk和jre的區別

jdk與jre的差異

#1.定義

JRE(Java Runtime Enviroment)是Java的運作環境。面向Java程式的使用者,而不是開發者。如果你只下載並安裝了JRE,那麼你的系統就只能執行Java程式。 JRE是運行Java程式所必須環境的集合,包含JVM標準實作及 Java核心類別庫。它包括Java虛擬機器、Java平台核心類別和支援文件。它不包含開發工具(編譯器、偵錯器等)。

JDK(Java Development Kit)又稱J2SDK(Java2 Software Development Kit),是Java開發工具包,它提供了Java的開發環境(提供了編譯器javac等工具,用於將java檔案編譯為class檔案)和運行環境(提供了JVM和Runtime輔助包,用於解析class檔案使其得到運行)。如果你下載並安裝了JDK,那麼你不僅可以開發Java程序,也同時擁有了運送 行Java程式的平台。 JDK是整個Java的核心,包含了Java運行環境(JRE),一堆Java工具tools.jar和Java標準類別庫 (rt.jar)。

推薦:《java學習

2. 區別

JRE主要包含:java類別庫的class檔案(都在lib目錄下打包成了jar)和虛擬機(jvm.dll);JDK主要包含:java類別庫的class檔案(都在lib目錄下打包成了jar)並自帶一個JRE。那為什麼JDK要自備一個JRE呢?而且jdk/jre/bin下的client 和server兩個資料夾下都包含jvm.dll(說明JDK自帶的JRE有兩個虛擬機器)。

記得在環境變數path中設定jdk/bin路徑麽?老師會告訴大家不設定的話javac和java是用不了的。確實jdk/bin目錄下包含了所有的指令。可是有沒有人想過我們用的java指令並不是jdk/bin目錄下的而是jre/bin目錄下的呢?不信可以做一個實驗,大家可以把jdk /bin目錄下的java.exe剪到別的地方再執行java程序,發現了什麼?一切OK! (JRE中沒有javac指令,原因很簡單,它不是開發環境)那麼有人會問了?我明明沒有設定jre/bin目錄到環境變數中啊?試想如果java為了提供給大多數人使用,他們是不需要jdk做開發的,只需 要jre能讓java程式跑起來就可以了,那麼每個客戶還需要手動去設定環境變數多麻煩啊?所以安裝jre的時候安裝程式自動幫你把jre的 java.exe加入到了系統變數中,驗證的方法很簡單,去Windows/system32下面去看看吧,發現了什麼?有一個java.exe。

3. 困難

如果安裝了JDK,你的電腦就有兩組JRE(JRE本身和JDK中的JRE),前面這套比後面那套少了Server端的Java虛擬機。

(1)為什麼Sun要讓JDK安裝兩組相同的JRE?這是因為JDK裡面有許多用Java寫的開發工具(如javac.exe、jar.exe 等),而且都放置在/lib/tools.jar裡。如果我們將tools.jar改名為tools1.jar,然後執行javac.exe,顯示以下結 果實:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/tools/javac/Main。這個意思是說,你輸入javac.exe與輸入java -cp c:/jdk/lib/tools.jar com.sun.tools.javac.Main 是一樣的,會得到相同的結果。從這裡我們可以證明javac.exe只是一個包裝器(Wrapper),而製作的目的是為了讓開發者免於輸入太長的指命。而且可以發現/lib目錄下的程式都很小,不大於29K,從這裡我們可以得到一個結論。就是JDK裡的工具幾乎是用Java編寫,所以也是Java應用程序,因此要使用JDK所附的工具來開發Java程序,也必須要自行附一套JRE才行,所以位於JDK目錄下的那套JRE就是用來執行一般Java程式的。

(2)如果一台電腦安裝兩套以上的JRE,誰來決定呢?這個重大任務就落在java.exe身上。 java.exe的工作就是找到適合的JRE來運作 行Java程式。 java.exe依照以下的順序來找出JRE:1)自己的目錄下有沒有JRE;2)父目錄有沒有JRE;3)查詢登錄:[HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment]。所以java.exe的運作結果與你的電腦裡面哪個JRE被執行有很大的關係。

(3)JDK-->JRE-->Bin目錄下有兩個資料夾:server與client,這是真正的jvm.dll所在。 jvm.dll無法單獨工作,當jvm.dll啟動後,會使用explicit的方法(就是使用Win32 API之中的LoadLibrary()與GetProcAddress()來載入輔助用的動態連結庫),而這些輔助用的動態連結函式庫(.dll)都必須位於jvm.dll所在目錄的父目錄之中。因此想使用哪個JVM,只需要設定PATH,指向JRE所在目錄下的jvm.dll。

4. 最主流的JDK是Sun公司發布的JDK,除了Sun之外,還有很多公司和組織都開發了自己的JDK,例如IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK等等。

以上是jdk和jre的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器