JDK, JRE和JVM的区别与联系

JDK: java development kit, java开发工具包,针对开发者,里面主要包含了jre, jvm, jdk源码包,以及bin文件夹下用于开发,编译运行的一些指令器。

JRE: java runtime environment, java运行时环境,针对java用户,也就是拥有可运行的.class文件包(jar或者war)的用户。里面主要包含了jvm和java运行时基本类库(rt.jar)。rt.jar可以简单粗暴地理解为:它就是java源码编译成的jar包(解压出来看一下),用eclipse开发时,当你ctrl点击发现不能跳转到源文件时,需要把rt.jar对应的源码包加进来,而这里的源码包正是jdk文件夹下的src.zip。如下图:


JVM: java虚拟机,将它理解为可以识别class文件的一个小型系统,class文件直接和它交互,所以它让class文件和用户真实的操作系统隔离,屏蔽了用户系统的差异性,给人一种感觉就是java出道的最大特点:一次编译,处处运行(跨平台)。而这也正是java跨平台引起过争议的一点,曾经一些人觉得java跨平台是个幌子,因为前提是用户机子上必须安装了JVM(准确地说是JRE)。

JDK和JRE区别:去bin文件夹下你会发现,JDK有javac.exe而JRE里面没有,众所周知javac指令是用来将java文件编译成class文件的,这是你开发去做的事,用户是不会去做的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。这也证实了一个是开发环境,一个是运行环境。

JRE和JVM区别:有些人觉得,JVM就可以执行class了,其实不然,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar。


抽象问题具体化理解:

JDK包含了JRE,JRE包含了JVM(简单粗暴式理解)。

你现在想用一段代码对全世界用计算机的人们说一句:hello world, 你首先想到可以将这两个单词写在每个用户计算机txt的里面,这太麻烦了,有些用户不是windows系统,他没有txt文件,你不知道怎么写,需要的是代码实现。然后你程序猿朋友在txt里面写了一个main,main里面写一句system.out.println("hello world"); 私下里 编译之后给到了你,说它很神奇,把它运行起来就能达到目的,你查了一下有个JVM的东西能运行这个文件,但是失败了,原因是JVM没那么智能,它不知道里面system, out, println这三个单词是用来做什么的,朋友告诉你要安装JRE,你安装后惊奇发现成功了。后来你逮谁就找谁实验,你只需要把JRE和你朋友给你的这个文件放上去,就能跟他说hello world。你按捺不住内心的崇拜之情,对朋友说:大牛,带我飞吧。朋友微微一笑,抛给你一个JDK,说拿去玩吧这就是武功秘籍。从此你踏上了java开发的不归路。


参考:http://www.zhihu.com/question/20317448

            http://playkid.blog.163.com/blog/static/56287260201372113842153/

            http://docs.oracle.com/javase/7/docs/

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值