JVM,JDK,JRE

# JVM,JDK,JRE
## 什么是JVM
Java 虚拟机。
这个名词**由Java和虚拟机前后两部分组成**。
它有和其他虚拟机**共性**:JVM是通过软件模拟的计算机系统。
它也有自己的**特性**:JVM使用软件模拟的指令集是Java字节码,**通过字节码这个中间层做到屏蔽对系统的依赖**。
### 追问:什么是字节码?字节码的好处?
字节码是Java虚拟机的指令,是具有一个字节长度的数字。

好处:**和解释性语言相比**解决了传统解释性语言执行效率低的问题,同时保留了语言可移植性的特点。所以Java程序高效且**无需重新编译**便可在多种不同操作系统上运行。
原因是:对于一般的代码,JVM将字节码**解释执行,屏蔽对系统的依赖**;对于热点的代码,会通过**JIT动态编译为机器码**,提高执行效率。

#### 再追问:什么是JIT?
JIT是Just In Time的意思,也就是即时编译
#### 再追问:即时编译那么快,为什么不全部都进行即时编译呢?
[引用博客园ddzz1991](%3Cahref="https://www.cnblogs.com/dzhou/p/9549839.html"%3Ehttps://www.cnblogs.com/dzhou/p/9549839.html%3C/a%3E)
**空间开销的角度看:**
对一般的Java方法而言,**编译后**代码的大小相对于字节码的大小,**膨胀比达到10x**,如果把所有代码都编译则会显著增加代码所占空间,导致“代码爆炸”。
**时间开销的角度看:**
**对比**解释执行和动态编译
**解释器的执行,抽象的看**:字节码 -> [ 解释器 解释执行 ] -> 执行结果
**JIT编译然后再执行的话,抽象的看**:字节码 -> [ 编译器 编译 ] -> 机器码 -> [ 执行 ] -> 执行结果
**快在哪里呢?** 不是“编译”或者“编译+执行”这个动作比“解释”这个动作快,而是 **“执行机器码”比“解释执行”要快。** 因为,仅仅JIT编译本身就比解释执行一次略慢一些。
**对于只执行一次的代码,解释执行比JIT编译更快。** 如果JIT编译所有代码,反而会变慢。
## JDK和JRE
[根据Oracle官方文档](%3Cahref="https://www.oracle.com/technetwork/java/javase/jdk-8-readme-2095712.html#jre"%3Ehttps://www.oracle.com/technetwork/java/javase/jdk-8-readme-2095712.html#jre%3C/a%3E)
>The JRE allows you to run applications written in the Java programming language. Like the JDK, it contains the Java Virtual Machine (JVM), classes comprising the Java platform API, and supporting files. Unlike the JDK, it does not contain development tools such as compilers and debuggers.

**翻译:** JRE能运行Java语言编写的程序,和JDK一样包含了JVM,包含Java平台API的类等等。**和JDK不同之处:** 不包含编译器调试器等开发工具。

**从Java9开始,就没有单独的JRE了**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值