认识JDK、JRE、JVM
JDK、JRE、JVM之间的关系:
首先看看JDK与JRE的区别与联系,如下图所示:
由图可知: JDK = JRE + Tools&Tool APIs
JDK的核心是Java SE API。JavaSE API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java SE API包括一些重要的语言结构以及基本图形,网络和文件I/O。我们在自己的程序中,调用前辈们写好的这些Class,来作为我们自己开发的一个基础。当然,现在已经有越来越多的性能更好或者功能更强大的第三方类库供我们使用。一般来说, Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。
JDK的种类:最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM(Java Virtual Machine)运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。
JRE(Java RuntimeEnvironment,Java运行环境),运行JAVA程序所必须的环境的集合。J2RE是Java2 Runtime Environment,即Java运行环境,有时简称JRE.如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK. 在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK.包含:
1. Java Runtime Environment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java JVM标准实现、Java平台核心类库和支持文件。它不包含开发工具——编译器、调试器和其它工具。
JVM:Java Virtual Mechinal(JAVA虚拟机)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的 CPU 的指令集或 OS 的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。
2. JRE所需辅助软件——Java Plug-in——以便在浏览器中运行applet.
一般情况下,如果您安装了JDK,那么你的电脑地下一定会有两套JRE、一套位于<jdk安装目录>\jre底下,另一套位于C:\Program File\JavaSoft底下(JDK1.4则是放在C:\Program File\Java底下)。如果你只下载了JRE而非JDK,那么就只会在C:\Program File\JavaSoft底下安装唯一的一套JRE。
由图可知JRE的地位就像一台PC一样,WIN32程序需要作业系统来帮我们执行,同样,Java应用程序需要JRE才能帮我们执行。当安装完JDK之后,如果分别在硬盘的不同地方安装了两套JRE,那么你可以想象你的电脑有两台虚拟的Java PC,都具有执行Java程序的功能。所以Java虚拟机只是JRE其中的一个成员而已,以更技术的角度来看,Java虚拟机只是JRE里头的一个动态连结函数库。
那么为什么会有两套JRE?真正原因是-JDK里面也附上了很多用Java写的开发工具(例如javac.exe、jar.exe等),而且它们都放置在<jdk安装目录\lib\tools.jar>之中。有人会问用Java编写的应用程序不是.class才对吗?其实在命令提示符中输入javac.exe和输入java -classpath
d:\j2sdk1.4.0\lib\tools.jar com.sun.tools.javac.Main会得到相同的结果,javac.exe只是一个包装器而已。JDK还有很多开发工具采用包装器的概念,在<jdk安装目录\bin>中可以看到。
JDK里面的工具几乎都是用Java所撰写的,所以JDK本身就是Java应用程序,因此要使用JDK附的工具来开发Java程序,也必需要自行附一套JRE才行,这就是<jdk安装目录>\jre底下需要一套JRE的原因。而位于Program File\底下那套JRE就是哪来执行我们自己撰写的Java应用程序。不过,两套JRE都可以用来执行我们自己写的程序,可以JDK内附的开发工具预设置使用包装器启动的情况下,都会自己去选择用<jdk安装目录>\jre底下的那套JRE。
这样又有新的问题了,像myeclipse等开发工具也有集成JRE,那么电脑就有很多套JRE,同样执行java.exe有可能会得到不同的结果。
那么我们执行的是那一个java.exe?
当我们输入java XXX的时候,java.exe的工作就是找到合适的JRE来执行。Java.exe依照下面的逻辑来寻找JRE:
(1)自己的目录下有没有JRE目录
(2)父目录底下JRE子目录
(3)查询windows registry(HKEY_LOCAL_MACHINE\Software\JavaSoft\Java\Runtime Environment\)
我们可以用path来指定执行哪个java.exe。当我们指定了path=d:\j2skd1.4.0\bin是,执行java.exe一定是d:\j2skd1.4.0\bin底下的java.exe,所以java.exe选到的是父目录d:\j2skd1.4.0底下的JRE。打开d:\j2skd1.4.0\jre\bin这个目录,您会看到client和server两个目录,里面都会分别看到jvm.dll,这就是Java虚拟机所在。
我们开发Java应用程序或是执行Java程序的时候,一定要记住两件事:
(1)那一个java.exe被执行。
(2)java.exe找到哪一套JRE。
http://blog.csdn.net/fanyun_01/article/details/50972863参考来源:
http://freesea.iteye.com/blog/160124 认识JDK、JRE、JVM的更多相关文章
- JDK,JRE,JVM区别与联系(ZZ)
http://www.cnblogs.com/hencehong/p/3252166.html 我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JD ...
- JDK,JRE,JVM区别与联系-理解与概括
我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析 ...
- JDK,JRE,JVM区别与联系
JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...
- 对JDK,JRE,JVM的理解
JAVA用到现在还是分不太清楚JDK,JRE,JVM这三者的区别与联系,一直都是模模糊糊的.所以今天整理下此中的关系. 简单说明:我们编写的.java文件经过JDK(JDK的bin目录下javac.e ...
- jdk jre jvm 关系
很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...
- JDK JRE JVM
使用java很久,但是一直不清楚JDK,JRE,JVM直接的关系,今天特地梳理一下. JDK:Java Development ToolKit(Java开发工具包),JDK是整个JAVA的核心,包括J ...
- JDK,JRE,JVM区别与联系(转)
JDK : JavaDevelopment ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具 ...
- 老李分享:JDK,JRE,JVM区别与联系
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- JDK,JRE,JVM的区别与联系
JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...
- AJPFX关于JDK,JRE,JVM的区别与联系
很多朋友可能跟我一样,对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天我们来整理下三者的关系. JDK : Java Development ToolKit(Java开发工具包) ...
随机推荐
- 使用Robo 3T 软件管理MongoDB数据库如何执行命令行shell
比如使用命令行的方式查看数据库runoobdb中的sites集合(数据表)中的所有数据 1.在连接名的地方鼠标右键选择“open shell” 2.在出现的shell窗口中输入一下命令行,然后按ctr ...
- BZOJ 2754 [SCOI2012]喵星球上的点名 (AC自动机、树状数组)
吐槽: 为啥很多人用AC自动机暴力跳都过了?复杂度真的对么? 做法一: AC自动机+树状数组 姓名的问题,中间加个特殊字符连起来即可. 肯定是对点名串建AC自动机(map存儿子),然后第一问就相当于问 ...
- 【codeforces 768D】Jon and Orbs
[题目链接]:http://codeforces.com/contest/768/problem/D [题意] 你有一个水晶; 它每天都会产生一个球??(球有k种) 然后每种球产生的可能性是相同的-& ...
- Spring MVC学习总结(9)——Spring MVC整合swagger自动生成api接口文档
Swagger 号称:世界最流行的API框架,官网:http://swagger.io/,Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总 ...
- BNUOJ 3958 MAX Average Problem
MAX Average Problem Time Limit: 3000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Jav ...
- OpenCV 基于超像素分割的图像区域选取方法及源码
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51386993 工程源码GitHub: ...
- 火柴棒等式(2008年NOIP全国联赛提高组)
题目描述 Description 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: ...
- oracle导入少量数据(少于10M)
工具用PL/SQL Developer select * from temp1 for update;开锁,点+号,直接从Excel复制,然后粘贴. 程序猿必读
- 用sqlldr导入csv文件
1.新建文件test.ctl,内容如下 load dataCHARACTERSET 'UTF16' \*指定编码格式,很重要*\ infile 'vodall.csv' append into tab ...
- npm install socket.io 提示缺少"VCBuild.exe"
http://www.cnblogs.com/yangzhx/p/4648501.html https://www.v2ex.com/t/120493