轉自http://blog.csdn.net/ghj1976/article/details/5543428
首先我們應該對 JDK,JRE,JVM 有所認知,下面這個圖就可以清晰的表述他們的關係:
JDK,JRE,JVM 的關係
一個更複雜的圖:這是 J2SE 1.5 具體功能圖表,在圖的左邊,我們可以清晰的看出哪些是JVM的範疇,哪些是JRE的範疇,哪些是JDK的範疇。
Java程式的執行邏輯
下面圖示範的是如何打造一個個人化的Java啟動器,這對我們理解Java執行的邏輯很有協助。是以Window環境打造個人化的Java啟動器的例子。
這幅圖來自: 打造個人化Java啟動器
最常見的啟動器是Sun在Java Runtime Environment的/bin目錄中提供的啟動器,就Windows平台而言,它們是java.exe和javaw.exe。前者運行時開啟兩個視窗:一個是接收System.out/err和啟動器輸出的控制台視窗,另一個是Java程式本身的視窗;javaw運行時不開啟控制台視窗。
在J2SE/EE平台中,虛擬機器以動態庫的形式實現,也放在/bin目錄下。動態庫的名字在Windows中是java.dll,在Unix中是java.so。所謂“裝入虛擬機器”,就是指裝入這個動態庫。
找這個動態庫的邏輯是依次按照下面搜尋先後順序去尋找:
- 先找目前的目錄下有沒有JRE
- 再找父目錄下有沒有JRE
- 接著在PATH路徑中找JRE
- 註冊表HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/ 查看CurrentVersion的索引值指向哪個JRE(這當然是windows下特有的。)
這不像 .Net ,.Net 引入了全域應用緩衝(GAC),一台機子,一個版本的 .Net Framework 就只有一套,就在GAC中,不用考慮這個尋找邏輯。
JRE 類庫的尋找
JRE內建的基礎類庫主要是JRE/lib/rt.jar這個檔案,包括了Java2平台標準版的所有類庫。和JRE的版本一致。
JRE中由ClassLoader負責尋找和載入程式引用到的類庫,基礎類庫ClassLoader會到rt.jar中自動載入,其它的類庫,ClassLoader在環境變數CLASSPATH指定的路徑中搜尋,按照先來先到的原則,放在CLASSPATH前面的類庫先被搜到.
Java程式啟動之前建議先把PATH和CLASSPATH環境變數設好。OS通過PATH來找JRE,確定基礎類庫rt.jar的位置。JRE的ClassLoader通過CLASSPATH找其它類庫。
JDK 的安裝
去 http://java.sun.com/javase/downloads/index.jsp 下載最新版本 JDK。 下載後安裝。
Windows 下安裝完畢後需要設定三個環境變數
| JAVA_HOME |
指明JDK安裝路徑,就是剛才安裝時的路徑C:/Program Files/Java/jdk1.6.0_19,此路徑下包括lib,bin,jre等檔案夾(此變數最好設定,因為以後運行tomcat,eclipse,ant 等都需要使用此變數) |
| PATH |
Path使得系統可以在任何路徑下識別java命令,設為: %JAVA_HOME%/bin;%JAVA_HOME%/jre/bin |
| CLASSPATH |
CLASSPATH為java載入類(class or lib)路徑,只有類在classpath中,java命令才能識別,設為: .;%JAVA_HOME%/lib;%JAVA_HOME%/lib/tools.jar (要加.表示當前路徑) %JAVA_HOME%就是引用前面指定的JAVA_HOME。 |
Linux 下則是要做如下設定(以我使用的 ubuntu 為例):
下載完後,我們就開始安裝了。(我們假設下載後的檔案名稱為jdk1.6.bin)
在命令列下開啟其所在檔案夾,打chmod u+x ./jdk1.6.bin (更改可執行許可權:u 表示該檔案的擁有者,+ 表示增加許可權,x 表示可執行)
然後./jdk1.6.bin
看到協議,一直敲Down鍵或者Enter鍵(協議還挺長的)
最後看到
Do you agree to the above license terms? [yes or no]
尋問是否接受,當然是打y 斷行符號拉~
然後就看到它解壓縮
解壓縮完後的預設檔案名稱是jdk1.6.0
接著打
sudo cp –r jdk1.6.0 /usr/ (cp -r : 遞迴持續複製,用於目錄的複製行為。)
把它複製到usr目錄裡去
好了,到這裡就只差配置環境了
export JAVA_HOME=/usr/jdk1.6.0
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin
打vi ~/.bashrc (vi 的命令參看:http://yanxi.bokewu.com/blog93673.htm)
進入使用者環境變數配置介面中,把上面的三行加入到最後,ESC,:wq
儲存並退出
這樣JDK就算配置好了~
參看:
http://forum.ubuntu.org.cn/viewtopic.php?f=44&t=174375
http://forum.ubuntu.org.cn/viewtopic.php?t=39742
http://www.360doc.com/content/08/1012/12/61497_1749889.shtml
http://forum.ubuntu.org.cn/viewforum.php?f=70
之後我們就可以寫一個超簡單的java程式。
依次: javac Test.java
java Test
來測試是否可以正常運行。
Eclipse 中我們也可以設定JDK的版本,
在我們的項目上右鍵Properties –> Java Compiler中將 –> Compiler compliance level 設成我們需要的版本即可。
需要注意的是:Eclipse不內建jdk,它只需要jre就可以運行(不需要javac),因為它內建編譯器(plugin目錄裡有compile包)。
在運行時,則是由於JRE安裝時已經在環境中添加java這個命令(無論windows還是Linux),eclipse便利用它啟動startup.jar。但如果只用jre,因為沒有原始碼,eclipse就不能根據源碼產生庫中type的注釋了。
如何查看當前Java運行環境的版本?
在命令列下面使用 java -fullversion 可以對目前的版本的。
參考資料:
JDK,JRE,JVM,三者的區別與聯絡
http://www.blogjava.net/jzone/articles/271115.html
SDK、JDK、JRE和JVM的關係總結
http://blog.csdn.net/achun2050/archive/2007/05/08/1600370.aspx
初步總結CLR和JRE運行機制
http://developer.51cto.com/art/200910/158035.htm
如何讓java運行在指定版本的JRE中。
http://hi.baidu.com/blueleopard/blog/item/cd46d4f9e5b91e5c252df286.html
怎樣運行JAVA程式
http://wenwen.soso.com/z/q131473345.htm
java程式運行機制及運行過程
http://www.cnblogs.com/xiaoQcn/archive/2010/01/26/1656394.html
關於JDK
http://blog.csdn.net/yqj2065/archive/2005/02/28/305593.aspx
打造個人化Java啟動器
http://www.pconline.com.cn/pcedu/empolder/gj/java/0404/346719.html
Linux系統下運行JAVA程式 JRE安裝和配置
http://tech.ddvip.com/2007-08/118717162731923.html
JDK、JRE、JVM之間的關係
http://www.cjsdn.net/post/view?bid=1&id=9965&sty=1&tpg=1&age=0
JDK下載安裝及其環境變數配置
http://www.svn8.com/java/pz/20080531/729.html
Eclipse的編譯器和Sun的javac還真不太一樣
http://www.javaeye.com/topic/318996
Eclipse設定項目jdk的問題
http://tech.ddvip.com/2008-12/122855371598107.html