对JDK,JRE,JVM的理解
- JAVA用到现在还是分不太清楚JDK,JRE,JVM这三者的区别与联系,一直都是模模糊糊的。所以今天整理下此中的关系。
- 简单说明:我们编写的.java文件经过JDK(JDK的bin目录下javac.exe程序)编译成.class文件。之后.class文件会运行在JRE环境下并被JVM解释后交给操作系统。下面先上个大家非常熟悉的图:
- 1.JDK:编译环境(编译类库 + 编译程序) + JRE 。
- 简单的说就是提供了Java的开发环境和编译环境一般包含JRE,主要用于开发JAVA程序,面向Java程序的开发者。就是个对.java文件的编译器,像eclipse、idea等其他IDEd都有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选中jre路径就ok了。
- 目录结构:
- bin:最主要的是包含编译器,javac.exe与java.exe(这里JRE也有相同的java.exe下面再讲)。 db:纯Java开发的数据库Derby,是一个开源的100%Java开发的关系数据库。 include:C语言头文件,支持用Java本地接口和JVM接口来本机代码编程。就是存放着java和JVM交互用的头文件。 jre:存放着一个完整的JRE(如果安装一个外部的JRE话会存在两个JRE分别是这里和C:\Program Files\Java目录下),执行bin目录下的工具。 lib:存放着用来支持jdk\bin下面的开发工具(编译器所需的)的非核心类库(tool.jar,还有dt.jar包含了BianInfo文件用来与IDE交互,显示定制javabean组件外观的)。
- 2.JRE:解释环境(解释类库 + 运行工具) + JVM。
- 对编译好的java程序提供了解释环境且包含了JVM,面向java程序的使用者。就是运行.class文件之后交给JVM。
- 目录结构:
- bin:包含运行工具,java.exe、javaw.exe、java-rmi.exe等等。 lib:包括java核心类,swing,rmi。java的API文档是对jre\lib\rt.jar的说明
- 3.JVM:java虚拟机,JRE的一部分。
- 1)我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分。所有的java程序会首先被编译为.class的类文件,这种类文件在JVM上执行解释,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释后交给本地系统执行。2)它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 的主要工作是解释自己的指令集(即字节码)并映射到本地的CPU的指令集或OS的系统调用。Java语言是跨平台运行的,其实就是不同的操作系统,使用不同的JVM映射规则,让其与操作系统无关,完成了跨平台性。JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件(class file)。类文件的组成包括 JVM 指令集,符号表以及一些补助信息。
- JRE目录下的Bin目录有两个目录:server与client。这就是真正的jvm.dll所在。但是jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位于jvm.dll所在目录的父目录之中。因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录底下的jvm.dll。
- 4.两个JRE安装JDK时一定会在其子目录下面安装一个JRE,同时在安装的过程也会询问你是否要安装一个外部的JRE(在C:\Program Files\Java目录下)。如果我们选择安装则就同时拥有了两个JRE。这两个JRE其实功能上是没有任何分别的。
- 花费额外的硬盘空间在不同的目录下安装两个一模一样的JRE,并不是一种浪费。真正的原因是因为JDK里有很多用Java语言编写的开发工具(被存放在<jdk安装目录>\lib\tools.jar目录下)。JDK里面的工具几乎都是用Java所编写的,所以JDK本身就是一个Java程序,也就必须有一套JRE来执行这个JDK。因此<jdk安装目录>\jre下的那一套JRE是用来执行JDK这个Java程序的,而位于C:\Program Files\下的那套JRE才是用来执行我们所编写的Java程序。不过,两套中的任何一套JRE都可以用来执行我们所编写的Java程序,可以JDK内的开发工具在预设使用包装器(.exe)来启动的情况下,都会自己去选择<jdk安装目录>\jre底下的那套JRE。
- 1)jdk\jre:是用来运行这个JDK时用到的。2)C:\Program Files\Java\jre:是用来执行我们所编写的Java程序。
- 5.三个java.exe程序
- 我们会发现JDK下bin目录里有一个java.exe,然后外部JRE下bin目录里也有一个java.exe,当然JDK下的JRE里也包含了一个java.exe。那么问题来了,学挖机哪家强?哈哈,开个玩笑,最近被这个洗脑了。问题是我们起初在cmd里解释.class文件的时候到底运行了的哪一个java.exe呢?
- 先看外部的JRE在安装的时候会自动注册到操作系统的path(但在系统环境变量中的path中并没有包含该命令的路径值)里面一般是:System32文件夹下(该文件夹下包含:java.exe,javaw.exe,javaws.exe三个文件)面。因此我们只要安装了外部的JRE(即使JDK没有安装,环境变量没有配置)则运行Java程序时都是用的外部JRE的java.exe程序来运行的(即使安装了JDK且配置了环境变量,系统的默认path具有优先)。
对JDK,JRE,JVM的理解的更多相关文章
- 1、Java语言概述与开发环境——JDK JRE JVM理解
一.理解概念: 1.JDK(Java Development Kit Java开发工具包) JDK是提供给Java开发人员使用的,其中包含Java的开发工具,也包括JRE,所以安装了JDK,就不用单独 ...
- JDK,JRE,JVM区别与联系-理解与概括
我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析 ...
- JDK JRE JVM
使用java很久,但是一直不清楚JDK,JRE,JVM直接的关系,今天特地梳理一下. JDK:Java Development ToolKit(Java开发工具包),JDK是整个JAVA的核心,包括J ...
- JDK,JRE,JVM区别与联系(ZZ)
http://www.cnblogs.com/hencehong/p/3252166.html 我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JD ...
- JDK,JRE,JVM区别与联系
JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...
- jdk jre jvm 关系
很多朋友可能跟我一样,已经使用JAVA开发很久了,可是对JDK,JRE,JVM这三者的联系与区别,一直都是模模糊糊的. 今天特写此文,来整理下三者的关系. JDK : Java Development ...
- 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工 ...
随机推荐
- json-lib 中关于null与"null"
总感觉json-lib里面关于null和"null"的处理非常不合理,或者说是bug,去了json-lib的网站,最后一次更新是10年了... 发现官方网站第一段就说json-li ...
- PostgreSql中如何kill掉正在执行的sql语句
虽然可以使用 kill -9 来强制删除用户进程,但是不建议这么去做. 因为:对于执行update的语句来说,kill掉进程,可能会导致Postgres进入到recovery mode 而在recov ...
- struts2更新版本操作有关事项备注
struts2更新版本操作有关事项备注, 更新主要jar包:struts2-convention-plugin-version,struts2-core-version, struts2-spring ...
- Android L 使用ART能提高多少性能?
点击打开链接 刚刚结束的 Google I/O 大会上,Android 下一代操作系统「L」带来不少惊喜.新系统运行更快.更省电. 然而开发者对这个新系统也有颇多疑问,比如新的运行模式 ART 对开发 ...
- Protected Member Access
https://msdn.microsoft.com/en-us/library/bcd5672a.aspx 官方的说法The protected keyword is a member access ...
- [UVA796]Critical Links(割边, 桥)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- 1320. Graph Decomposition
1320 简单并查集 #include <iostream> #include<cstdio> #include<cstring> #include<algo ...
- 如何使用 Java 测试 IBM Systems Director 的 REST API
转自: http://www.ibm.com/developerworks/cn/aix/library/au-aix-systemsdirector/section2.html 如何使用 Java ...
- UVa 1252 (状压DP + 记忆化搜索) Twenty Questions
题意: 有n个长为m的各不相同的二进制数(允许存在前导0),别人已经事先想好n个数中的一个数W,你要猜出这个数. 每次只可以询问该数的第K为是否为1. 问采用最优询问策略,则最少需要询问多少次能保证猜 ...
- 一个java高级工程师的进阶之路
宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究 ...