Java学了有两年了,要让详细说说JRE、JDK、JVM,确实不能脱口而出。下面在别人博客的基础上,总结一下。

JVM(Java Virtual Machine 即Java虚拟机)


  它是整个Java实现跨平台的核心部分。所有的Java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。

  也可以理解为是一个虚拟出来的计算机,具备着计算机的基本运算方式,它主要负责将Java程序生成的字节码文件解释成具体系统平台上的机器指令。让具体的平台如Windows/Linux运行这些Java程序。

JRE(Java Runtime Environment 即Java运行环境)


  光有JVM还不能执行class文件,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里可以看到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是JVM,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。所以,在写完Java程序编译成.class之后,可以把.class文件和jre一起打包发给别人,这样别人就可以运行你的程序了。如果想要运行一个开发好的Java程序,只需要给计算机安装JRE即可。

JDK(Java Development Kit 即Java开发工具包)


  在jdk的安装目录下有6个文件夹、一个src类库源码压缩包和其他几个声明文件。其中,真正在运行java文件时起到作用的是一下四个文件夹:bin、include、lib、jre。JDK包含JRE,而JRE包含JVM。bin:最主要的是javac(编译器);include:java和JVM交互用的头文件;lib:类库;jre:java运行环境;

  总的来说,JDK用于Java程序的开发,而JRE是运行class文件的运行环境不具备编译Java文件的功能。JDK提供Java开发人员使用,其中主要包含了Java的开发工具,其次也包括JRE。所以安装了JDK也就有了JRE。

三者的关系


JVM:将字节码文件转换成具体系统平台的机器指令。

JRE:JVM+Java语言的核心类库。

JDK:JRE+Java开发工具包。

  在实际开发的过程中:我们利用JDK(调用Java API)开发了属于我们自己的Java程序后,通过JDK中的编译程序(javac)将我们的java文件编译为java字节码文件(.class文件),然后在JRE上运行这些Java字节码文件,最后JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

最新文章

  1. WordPress基础:小工具的使用
  2. pojBuy Tickets2828线段树或者树状数组(队列中倒序插队)
  3. 提供给Android和iOS开发人员的UWP移植向导
  4. java多线程编程--基础篇
  5. iOS-开发技巧-页面布局
  6. CI加载流程小结
  7. HDU 5572 An Easy Physics Problem (计算几何+对称点模板)
  8. 使用iframe框架后的页面跳转时目标页面变为iframe的子页面的问题
  9. Chessboard POJ - 2446(最大流 || 匹配)
  10. window.open() 打开的子页面 往主页面传参问题
  11. SpringMVC接受JSON参数详解及常见错误总结我改
  12. 如何使用js判断当前页面是pc还是移动端打开的
  13. C语言:结构体,共用体
  14. 在java代码中执行js脚本,实现计算出字符串“(1+2)*(1+3)”的结果
  15. 195 Tenth Line
  16. Linux网络通信
  17. posix进程间通信
  18. jQuery EasyUI教程之datagrid应用-2
  19. GLSL 在OpenGL中向shader传递信息【转】
  20. 编辑器——sublime

热门文章

  1. ExtJs之Ext.core.DomQuery
  2. 从Config文件中读取节点的配置信息
  3. 51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛
  4. Linux问题定位工具大放送
  5. CF 253B Two Heaps
  6. Hadoop基础教程之高级编程
  7. hive-学习笔记
  8. CentOS防火墙操作实例(启动、停止、开、闭端口)
  9. 《mysql悲观锁总结和实践》-悲观锁
  10. (step4.2.5)hdu 1495(非常可乐——BFS)