一纫谅、概念
JDK:Java Development Kit。即Java開發(fā)工具脖母,其中包含了Java運(yùn)行環(huán)境澡刹、Java工具和Java基礎(chǔ)類庫。
JRE:Java Runtime Enviroment套腹。即Java運(yùn)行環(huán)境绪抛,包含JVM以及Java核心類庫。
JVM:Java Virtual Machine电禀。即Java虛擬機(jī),是整個Java平臺最關(guān)鍵的部分笤休,用來運(yùn)行Java程序尖飞。
背景:和其他程序不同,Java程序由JDKjavac
編譯成class文件的,然后在JRE環(huán)境(虛擬機(jī)JVM+lib核心文件jar)下運(yùn)行政基,由虛擬機(jī)解釋成機(jī)器語言贞铣。同時,每個操作系統(tǒng)的jvm都不一樣沮明,因此能讓Java 程序在各大操作系統(tǒng)中運(yùn)行辕坝。
<br />
二、 關(guān)系
1. 在安裝JDK的時候會附帶一個JRE詢問是否安裝荐健,同時安裝好的JDK目錄下也有一個jre
目錄酱畅。為什么會存在2個JRE,他們是什么區(qū)別呢江场?
答:
JRE是Java運(yùn)行環(huán)境纺酸,而JDK是包含了Java運(yùn)行環(huán)境和諸多Java工具基礎(chǔ)類庫的開發(fā)工具。
因此址否,很多人可能已經(jīng)明白了:JDK下的工具都是Java寫的餐蔬,而要運(yùn)行這些程序,就需要JRE佑附,因此jre
是給開發(fā)人員使用的樊诺,當(dāng)開發(fā)人員使用了JDK工具,寫了程序音同,當(dāng)然就需要JRE來運(yùn)行词爬。而如果當(dāng)用戶只需要運(yùn)行Java程序的時候,單獨(dú)的JRE就足夠了瘟斜。工作職責(zé)不同
也因此缸夹,只有在JDK的jre目錄下存在用來編譯的javac.exe
文件,而單獨(dú)JRE下的無法查看api
<br />
2. 在JRE下的lib
和JDK下的/jre/bin
目錄中存在的client
和server
目錄中的jvm.dll螺句。他們又是什么區(qū)別呢虽惭?
答:
server與client下jvm.dll的差別在于所使用的vm不同,執(zhí)行java程序時默認(rèn)的是client VM蛇尚。若使用server VM芽唇,會花比較長的啟動時間及消耗較多的內(nèi)存,為的是啟動程序后可以獲得較好的執(zhí)行性能取劫。
<br />
3. JDK匆笤、JRE中共有3個bin
目錄,他們有什么區(qū)別谱邪?
答:
JDK下的lib
包括Java開發(fā)需要的jar包炮捧,JDK下的一些工具可能用到該目錄中的文件,比如編譯器惦银。
JRE下的lib
包括Java運(yùn)行需要的jar包咆课,是給JVM運(yùn)行使用末誓,包括所有標(biāo)準(zhǔn)類和擴(kuò)張類。
JDK下的JRE中的lib
是開發(fā)環(huán)境中书蚪,給JVM運(yùn)行使用的jar包喇澡。當(dāng)導(dǎo)入外部jar包時,因?yàn)橄到y(tǒng)需要編譯殊校,會調(diào)用JDK的編譯器晴玖,同時由于運(yùn)行需要,會需要JVM虛擬機(jī)運(yùn)行程序为流。
<br />
4.Java環(huán)境配置時的path和classpath有什么用
答:
path是給JDK的工具提供的呕屎,是為了能在cmd中通過直接敲命令執(zhí)行的。
classpath是為Java程序用到的庫文件所設(shè)的艺谆,是資源庫榨惰。因此當(dāng)我們在開發(fā)中需要其他jar包,就要將他們加到classpath中静汤。
<br />
5.javac和java有什么區(qū)別琅催?
答:
Javac是把Java文件編譯成class,Java是執(zhí)行class文件虫给。
在命令行中javac -version
是JDK版本藤抡,java -version
是JRE版本。所有可以通過修改path抹估,改變系統(tǒng)默認(rèn)的JDK版本和JRE版本缠黍。【where java】能查看本機(jī)上所有的java命令路徑
一般默認(rèn)JRE使用JDK下的JRE药蜻。