關於 JDK 解說整理

前言:今天面試有道題是問什麼是JDK,我瞬間拿出手機來看看趕緊拿回去,瑟瑟發搜。。回來好好整理下!!!
對jdk和jre的理解

1、JDK是Java Development Kit,它是功能齊全的Java SDK。它擁有JRE所擁有 的一切,還有編譯器(javac)和工具(如javadoc和jdb).它能夠創建和編 譯程序
jdk 目錄介紹:
bin 編譯器和工具
demo 演示
docs HTML格式的類庫文檔(解壓j2sdkversion-doc.zip之後)
include 用於編譯本地方法的文件
jre java運行環境文件
lib 類庫文件(jar包,java命令和其他的一些基礎構件,如基本數據類型的封裝類)
src 類庫源文件(jar文件源碼,可用JD-GUI等反編譯文件獲取)

2.JRE:Java Runtime Enviroment(java運行環境,用戶只需JRE)

JRE 是 Java運行時環境。它是運行已編譯 Java 程序所需的所有內容的集合, 包括 Java虛擬機(JVM),Java類庫,java命令和其他的一些基礎構件。但 是,它不能用於創建新程序。

3.JDK與JRE關係

如果你只是爲了運行一下 Java 程序的話,那麼你只需要安裝 JRE 就可以了。 如果你需要進行一些 Java 編程方面的工作,那麼你就需要安裝JDK了。但 是,這不是絕對的。有時,即使您不打算在計算機上進行任何Java開發,仍然需要安裝JDK。例如,如果要使用JSP部署Web應用程序,那麼從技術上講, 您只是在應用程序服務器中運行Java程序。那你爲什麼需要JDK呢?因爲應用 程序服務器會將 JSP 轉換爲 Java servlet,並且需要使用 JDK 來編譯 servlet。

4.JVM:運行 Java 字節碼文件(.class文件)的虛擬機。

JVM有針對不同系統的特定實現(Windows,Linux,macOS),目的是使用相同的字節碼,它們都會給出相同的結果(跨平臺特性,一定程度減慢了java程序的執行速度)。注意:JVM是分版本的,因爲JVM需要調用平臺(即操作系統)底層的函數。也可這樣說,JVM是不跨平臺的(而Java語言是跨平臺的),因爲它的存在就是Java程序和操作系統之間的一個過渡,所以它得分版本。

5. 爲什麼要java使用字節碼文件?

在 Java 中,JVM可以理解的代碼就叫做字節碼(即擴展名爲 .class 的文 件),它不面向任何特定的處理器,只面向虛擬機。Java 語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。所以 Java 程序運行時比較高效,而且,由於字節碼 並不專對一種特定的機器,因此,Java程序無須重新編譯便可在多種不同的計算機上運行。 Java 程序從源代碼到運行一般有下面3步:
我們需要格外注意的是 .class->機器碼 這一步。在這一步 jvm 類加載器首先 加載字節碼文件,然後通過解釋器逐行解釋執行,這種方式的執行速度會相對 比較慢。而且,有些方法和代碼塊是經常需要被調用的,也就是所謂的熱點代 碼,所以後面引進了 JIT 編譯器,JIT 屬於運行時編譯。當 JIT 編譯器完成第 一次編譯後,其會將字節碼對應的機器碼保存下來,下次可以直接使用。而我 們知道,機器碼的運行效率肯定是高於 Java 解釋器的。這也解釋了我們爲什 麼經常會說 Java 是編譯與解釋共存的語言。
HotSpot採用了惰性評估(Lazy Evaluation)的做法,根據二八定律,消耗大部分 系統資源的只有那一小部分的代碼(熱點代碼),而這也就是JIT所需要編譯 的部分。JVM會根據代碼每次被執行的情況收集信息並相應地做出一些優化, 因此執行的次數越多,它的速度就越快。JDK 9引入了一種新的編譯模式 AOT(Ahead of Time Compilation),它是直接將字節碼編譯成機器碼,這樣就 避免了JIT預熱等各方面的開銷。JDK支持分層編譯和AOT協作使用。但是 , AOT 編譯器的編譯質量是肯定比不上 JIT 編譯器的。 總結:Java虛擬機(JVM)是運行 Java 字節碼的虛擬機。JVM有針對不同系 統的特定實現(Windows,Linux,macOS),目的是使用相同的字節碼,它們 都會給出相同的結果。字節碼和不同系統的 JVM 實現是 Java 語言“一次編 譯,隨處可以運行”的關鍵所在。

在這裏插入圖片描述
 

另外安裝成功沒成功 如下命令查看:。。

在這裏插入圖片描述

【轉載註明出處,尊重原創 】

 

【作者水平有限,如有錯誤歡迎指正 .】

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