刚刚读了王深大哥的《深入J2SDK 》,受益非浅,希望看到这篇文章的同僚到“java技术论坛”去down下来看看。
接触过java的人相信不回对jdk(java development kit),jre(java run-time environment),jvm(java virtual machine)感到陌生吧,其中jdk与jre之间的关系用下面的图来表示再好不过了:
看了上面的图你是否发现有两套jre在你的电脑中,那么究竟jre是干什么的呢,看名字就知道是java的运行环境了,看看下面的图,相信你会有更深的认识
很清楚了吧,实际上就是一个独立的虚拟的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有更深刻的认识