(1) JVM

JVM,Java Virtual Machine,Java虚拟机,是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象的硬件,如处理器、堆栈、寄存器、还有相应的指令系统(对于类Java程序JVM就是一台计算机)。JVM的存在使得Java语言得以实现跨平台,因为Java程序只要面对JVM即可,而JVM则负责面对不同OS,用户只要安装JRE(后面会讲到)即可在不同OS上运行Java程序。   

说是虚拟机,但JVM其实只是一种规范,它只是说明了虚拟机的构成需要哪些部件组成,这些部件需要完成哪些功能,有哪些规格需要遵守,可以理解为,JVM是一个接口,具体的实现由具体的产商自己实现(这也就是为什么JVM有各种版本的说,比如GC算法的不同,内存划分的不同等等)。

为什么说是类Java语言呢?是因为,JVM的目标不只是跨平台,还有跨语言,不止Java可以运行在JVM上,其他语言,只要提供相应的编译器,都可以运行在上面。这很好理解,JVM能理解的就一种,JVM的字节码,那想办法把其他的语言编译成这种字节码不就成了吗?事实上也确实是这样做的(开发各种语言的对应编译器)。(至于为什么其他语言要这样做,可以查看:http://www.zhihu.com/question/20003582,或者自行百度。。。)

再说下,SDK,JDK,JRE,JVM之间的关系,简单地说:SDK 包含 JDK 包含 JRE 包含 JVM。

再简单详细的说明:

JDK = JRE + Java开发工具:开发工具包括编译器、反汇编、监控分析器等,能完整开发运行测试Java程序。这些工具位于JDK目录下的bin目录下。(JDK也分为J2SE,J2ME,J2EE,分别是Java标准版,Java移动版,Java企业版)

JRE = JVM + Java语言核心类库:光有JVM是不能运行Java字节码文件的,还必须要有相关的库文件,比如Object类得有吧,ClassLoader类得有吧,等等。JRE位于JDK目录下的jre文件夹,jre文件夹下的lib文件就是Java语言核心类库文件所在。

JRE是运行环境,想要运行Java程序必须要有JRE,而JDK,Java软件开发包,是开发环境,还要编译啊,监控啊,分析啊等其他工作,当然,肯定要运行Java程序然后进行测试,要运行,就必须得有JRE(所以JDK下有JRE)。

那JVM位于哪里呢?有两个地方,一个是JDK/bin/java,一个是JDK/jre/bin/java。为什么会有两个呢?是因为JDK那些工具本身就是Java编写的,我们知道,想要运行Java程序必须得有JRE,所以,前者就是用来运行JDK/bin/下那些Java开发工具的,而后者才是运行你开发出来的或其他引进来的Java程序。(为什么不放在一起呢,是为了分工明确?但本质上两个JVM是没区别的,JDK/bin/java只有JVM,要运行那些工具依赖的库应该是在JDK/lib目录下,因为只运行这些工具,不需要全部类库。)

以上只是博主的查阅及自身理解,后续将不断更新。

找到一篇不错的文章,可以看下:java之jvm学习笔记十三(jvm基本结构)( keycoding)(2016-10-08)

JVM的运行原理以及组成结构将会在下一节详细分析理解。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值