知识大全 关于 java.exe 是如何载入 JVM

Posted 版本

篇首语:注意力是智慧的门户。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 关于 java.exe 是如何载入 JVM相关的知识,希望对你有一定的参考价值。

关于 java.exe 是如何载入 JVM  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   将会生成如下 个项目   HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Development Kit   HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Plug in   HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Runtime Environment     同时 Java SDK安装程序将会把java exe javaw exe javareg exe这 个可执行文件拷贝到winnt\\system 目录下 由于winnt\\system 被操作系统缺省的设置为最高优先权的PATH搜索路径 因此可保证用户在命令行任何目录下可运行java exe来启动JVM     那么java exe在启动时如何确定其JRE所在的目录以及需要动态加载的链接库呢?java exe是通过下面方式来确定的     假如存在 /jre/bin/java dll文件 则查找 /jre/lib/ jvm cfg文件 在该文件中 第 个被列出的jvm dll类型作为缺省值(假如在java exe命令行指定了jvm dll的类型 则使用指定类型) jvm dll类型分为hotspot classic server三种 假如不存在 /jre/lib/jvm cfg文件 则打印下面的错误信息     Error: could not open c:\\jdk \\jre\\lib\\jvm cfg     如不存在 /jre/bin/java dll(当运行的是winnt\\system \\java exe) 则注册表将在此时发挥作用 HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Runtime Environment\\ CurrentVersion键值所记录的实际上是winnt\\system \\java exe的版本值 该版本值只保存主 次两个版本号 如 等     同时java exe程序内部本身也有一个标识自身的版本值 如 等 java exe根据自己内部的版本值和CurrentVersion值相比较 如果发现两个值相等 则将在HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Runtime Environment\\MainVersion MicroVersion项下获取JRE所在目录及动态链接库 这两个键的名称分别是JavaHome和RuntimeLib MainVersion表示主版本号 MicroVersion表示次版本号     如果java exe内部版本值和CurrentVersion不一致 则报类似以下的错误     Registry key Sofare\\JavaSoft\\Java Runtime Environment\\CurrentVersion   has value but is required     意思是说 注册表当前所记载的winnt\\system \\java exe版本为 但是此时运行的java exe版本为 java exe抱怨除非注册表有 版的记载 否则自己无法正确定位JRE目录和jvm dll 因此提示 是需要的     这里 我们不能简单的修改注册表的CurrentVersion值来达到这个目的 一般地 当在系统中装了两套版本的Java SDK(如先装 而后又装了 ) 后面安装的Java SDK会将自己带的java exe和javaw exe拷贝到winnt\\system 目录下 从而覆蓋先前版本的java exe和javaw exe 并且在注册表中改写CurrentVersion为 所以建议在安装Java SDK前 先卸载以前安装的版本 如果人为的修改CurrentVersion 会使得不同版本的java exe加载与己版本不符的java dll及jvm dll 将引起难以预料的后果!      特殊情况   JBuilder自己带一套JDK 在JBuilder安装完成后 JBuilder安装程序会修改CurrentVersion为自己所带JDK的版本 但不会覆蓋winnt\\system 下的java exe和javaw exe     WebLogic自己带一套JDK 在WebLogic安装完成后 WebLogic安装程序不会修改注册表 也不会覆蓋winnt\\system 下的java exe和javaw exe     Oracle自己带一套JDK(一般是比较低版本的 例如 仅仅带JDK ) 在Oracle安装完成后 Oracle安装程序不会修改注册表 也不会覆蓋winnt\\system 下的java exe和javaw exe 但是 Oralce安装程序会修改系统PATH变量 将自带的JRE的bin路径加入其中 且置于最前面 随着Oracle安装版本的不同 其自带JRE的JVM启动程序也不同 在笔者机器上安装的Oracle 其JRE就装在C:\\Program Files\\Oracle下 并将C:\\Program Files\\Oracle\\jre\\ \\bin放在PATH变量最前 其JVM启动程序是jre exe而非java exe     以上就是Java SDK在Windows下安装时所做的动作 这样会带来兼容性问题     问题背景 安装Java SDK后 安装了JBuilder 未修改任何PATH变量      问题   当在操作系统中安装了JDK 其后安装了JBuilder (自带JDK ) 这时CurrentVersion为 在命令行执行java version时 提示     Registry key Sofare\\JavaSoft\\Java Runtime Environment\\CurrentVersion   has value but is required     解决方法 将JDK 中java exe所在路径加入到操作系统PATH的首位 从而保证在命令行调用java时总是执行JDK 中的java exe 以使得java exe可正确定位JRE和jvm dll      问题   当在操作系统中安装了JDK 而后安装了JBuilder (自带JDK ) 这时CurrentVersion为 但是此 是指向的是JBuilder 自带的JDK 的JRE 而非指向先前JDK 的JRE 当在命令行执行java version时 此时执行的是JDK 拷贝到winnt\\system 的一个java exe副本 但打印的版本信息却是     java version   Java(TM) Runtime Environment Standard Edition (build b )   Java HotSpot(TM) Client VM (build b mixed mode)     导致该问题的原因是java exe只维护小数点后 位的版本号 而非 位      解决方法 同问题    问题   如果在操作系统中先安装了JDK 而后安装了带有与安装JDK主次版本相同的JBuilder (带JDK 前两位相同) 则问题 实际上被隐蔽了 没有发生的机会 而问题 的隐蔽性也很强 不容易发觉 因为人们往往会忽略JDK的第 个版本号     如问题 所叙 在命令行执行java 虽然是使用JDK 的一个java exe副本(winnt\\system 目录下) 而实际上却是使用JBuilder 下JDK 的JRE及其目录结构 其结果是当我们使用Java 的extension mechanism将jar文件放到JDK 的jre\\lib\\ext目录下时 发现达不到希望的效果 – 在命令行用java启动程序时 不会自动去JDK 的jre\\lib\\ext目录下去搜索jar文件 它只会去JBuilder 下JDK 的jre\\lib\\ext去搜索jar文件 而JBuilder 下的JDK 并不存在jre\\lib\\ext这么一个目录!     问题 极为隐蔽 除非完全对Java SDK的安装及class定位机制了解 一般的开发者是难以发现问题所在的 有关Java 中class定位机制 见《Java 中的class定位机制》一文     事实上 即使仅仅在系统中存在一份JDK 如果在命令行运行java的话 使用的JRE目录是C:\\Program Files\\JavaSoft\\JRE\\ 也就是说 即使我们在c:\\jdk \\jre\\lib\\ext下放置我们的extension jar 也得不到预期的结果 正确的做法是放在C:\\Program Files\\JavaSoft\\JRE\\ \\lib\\ext目录下      解决方法 同问题   综上所叙 强烈建议将%JDK_HOME%\\bin目录放在Windows操作系统的PATH变量的首位 以避免潜在的问题     而在UNIX下 则完全不存在类似Windows操作系统上的问题     我们在命令下执行的java是/bin/java     $which java   $/bin/java     而/bin是到/usr/bin的链接 也就是说/bin/java实际上是/usr/bin/java     而/usr/bin/java实际上链接到/usr/java/bin/java /usr/java是到/usr/java 的链接(Solaris 或更高系统内置JDK ) 所以我们实际上执行的java是     /usr/java /bin/java     根据UNIX上的情况 java在运行时实际上总是可以用 /jre/lib/sparc/libjava so和 /jre/lib/sparc/libjvm so来找到这 个文件 前者类似于Windows下的java dll 而后者类似于Windows下的jvm dll 所以java也总是可以确定自己JRE的目录     Windows和UNIX上用到的动态链接库 实际上在Sun的文档中称为optional package s native code binaries optional pakage实际上即为extension mechanism classes 详见《Java 中的class定位机制》     要更改UNIX上java的版本 更改/usr/java的链接是其中一个方法 具体可参见JDK在UNIX上的安装介绍     补充 ( )     Windows如何定位Plug in     根据在PATH环境变量中找到的java exe的版本号 到HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Plug in下寻找对应版本的Java Plug in 在HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Plug in下可以有多个版本的Plug in存在     不依赖HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Development Kit的CurrentVersion值和HKEY_LOCAL_MACHINE\\SOFARE\\JavaSoft\\Java Runtime Environment的CurrentVersion值来定位应该使用哪个版本的Java Plug in cha138/Article/program/Java/hx/201311/26028

相关参考

知识大全 关于设置Java虚拟机(JVM)的内存问题

关于设置Java虚拟机(JVM)的内存问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近做

知识大全 关于jvm的内存限制的问题的解决办法

  jdk编译器对内存的支持不同client状态和server状态不同后者支持更大些操作系统不同也存在不同位操作系统就比位操作系统大  测试方法在命令行下用javaXmxXXXXMversion命令来

空间技术 载入登月飞船

   载入登月飞船   苏联1957年成功地发射第一颗人造地球卫星后,又接连不断地发射了一些卫星,从中掌握了航天器的回收技术。接着,又发射了

知识大全 以前的微信聊天记录里有的图片显示无法载入是怎么回事,求大神帮忙

以前的微信聊天记录里有的图片显示无法载入是怎么回事,求大神帮忙看看微信快取是不是需要清理或者网路状态和手机的空间.再打不开估计是图片损坏了微信图片显示无法载入是怎么回事!加油,相信你应该清楚快取假如清

知识大全 PHP中将文件载入数组

PHP中将文件载入数组  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!viewsourceprint

知识大全 实现JAVA的动态类载入机制

实现JAVA的动态类载入机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作为充分利用Java

知识大全 为文章标题链接添加动态载入效果

    很多朋友应该都会发现在我的博客里移动和点击标题都有一些动态效果右移的效果请移步上次写的文章《分享本站标题链接平滑右移效果》今天写的是点击之后的那个动态loading的效果两种的效果到主页点击标

知识大全 浅析LigerUi开发中谨慎载入common.css文件

浅析LigerUi开发中谨慎载入common.css文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 为什么现在百度云网盘网页版登陆后检视订阅的人分享的档案显示载入失败

为什么现在百度云网盘网页版登陆后检视订阅的人分享的档案显示载入失败?f5到出来为止现在的百度云网盘为什么分享出来的连结打不开网页,我的百度云网盘还提示有些分享失败,我该怎么做?不会是稽核没通过吧?(被

知识大全 我的电脑开机显示载入档案后就进入自动修复状态,可一直修复不了怎么

我的电脑开机显示载入档案后就进入自动修复状态,可一直修复不了怎么1,建议开机按F8不放,在出现高阶选单时松开F8键,选择最近一次正确配置(高阶)。2,如果也进不去,就只能重灌系统了。膝上型电脑开机时显