JVM,JDK,JRE

什么是JVM

Java 虚拟机。
这个名词由Java和虚拟机前后两部分组成
它有和其他虚拟机共性:JVM是通过软件模拟的计算机系统。
它也有自己的特性:JVM使用软件模拟的指令集是Java字节码,通过字节码这个中间层做到屏蔽对系统的依赖

追问:什么是字节码?字节码的好处?

字节码是Java虚拟机的指令,是具有一个字节长度的数字。

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

再追问:什么是JIT?

JIT是Just In Time的意思,也就是即时编译

再追问:即时编译那么快,为什么不全部都进行即时编译呢?

引用博客园ddzz1991
空间开销的角度看:
对一般的Java方法而言,编译后代码的大小相对于字节码的大小,膨胀比达到10x,如果把所有代码都编译则会显著增加代码所占空间,导致“代码爆炸”。
时间开销的角度看:
对比解释执行和动态编译
解释器的执行,抽象的看:字节码 -> [ 解释器 解释执行 ] -> 执行结果
JIT编译然后再执行的话,抽象的看:字节码 -> [ 编译器 编译 ] -> 机器码 -> [ 执行 ] -> 执行结果
快在哪里呢? 不是“编译”或者“编译+执行”这个动作比“解释”这个动作快,而是 “执行机器码”比“解释执行”要快。 因为,仅仅JIT编译本身就比解释执行一次略慢一些。
对于只执行一次的代码,解释执行比JIT编译更快。 如果JIT编译所有代码,反而会变慢。

JDK和JRE

根据Oracle官方文档

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了

JVM,JDK,JRE的更多相关文章

  1. jvm jdk jre 关系

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

  2. JVM/JDK/JRE/IDE—区别(很经典)

    转载于 http://blog.csdn.net/jojo52013145/article/details/5801916 只是为了学习,转载没有别的目地,就是爱copy,copy一点点,进步一点点 ...

  3. jdk,jre.jvm三者的关系

    jdk>jre>jvm jdk=jre+java的开发工具(包括java.exe,javac.exe.javadoc.exe) jre=jvm+java核心类库

  4. 细分java环境中的JDK、JVM、JRE

    细分java环境中的JDK.JVM.JRE 近来小看了下Android,扑面而来一堆概念JDK.JVM.JRE.SDK.NDK.ADT.缕了一下,其中JDK.JVM.JRE是java环境的东西,而SD ...

  5. jvm、jre、jdk

    JVM和JRE浅谈 Java运行时环境JRE包含:Java虚拟机.库函数.运行Java应用程序和Applet所必须的文件,JDK(又称SDK)包含:JRE的超集.编译器.调试器等开发工具. java平 ...

  6. JDK,JRE,JVM区别与联系(ZZ)

    http://www.cnblogs.com/hencehong/p/3252166.html 我们开发的实际情况是:我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JD ...

  7. JDK,JRE,JVM区别与联系-理解与概括

    我们利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析 ...

  8. JDK,JRE,JVM区别与联系

    JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...

  9. 对JDK,JRE,JVM的理解

    JAVA用到现在还是分不太清楚JDK,JRE,JVM这三者的区别与联系,一直都是模模糊糊的.所以今天整理下此中的关系. 简单说明:我们编写的.java文件经过JDK(JDK的bin目录下javac.e ...

随机推荐

  1. Codeforces1141F_Same Sum Blocks

    题意 给定一个序列,求最多的不相交区间满足区间和相同. 分析 从暴力的角度想,是枚举区间再求和,反过来想,直接记录每个和对应是那些区间,然后排个序求最大不相交即可. 代码 #include <b ...

  2. window 后台运行的应用程序点击没反应

    有时候,开了几个软件,有的软件一段时间没点击,再点击软件的图标一点反应都没有,这时,可以试着这么做: window 快捷键 :win + r  , 输入命令 : taskmgr ,打开任务管理器,选择 ...

  3. PHP array_shift

    1.函数的作用:删除数组的头个元素并返回 2.函数的参数: @params array  &$array 3.需要注意的例子: <?php /** * http://php.net/ma ...

  4. if循环判断

    if循环判断 if-else循环的语法格式 if 逻辑判断句: ​ 代码块 # 缩进表示所属关系 else 逻辑判断句: ​ 代码块 if 和elif同时使用来做多层判断 if 逻辑判断式: 代码块 ...

  5. C#初始类和命名空间

    本节内容: 1.剖析Hello,World程序 1.1初始类(class)与名称空间(namespace) 2.类库的引用 2.1DLL的引用(黑盒引用) 2.2项目引用(白盒引用) 2.3建立自己的 ...

  6. org.thymeleaf.exceptions.TemplateInputException: Error resolving template 报错

    org.thymeleaf.exceptions.TemplateInputException: Error resolving template报错 遇到二次,第一次是刚刚学的时候,都是一个原因,而 ...

  7. ASP.NET WebApi+Vue前后端分离之允许启用跨域请求

    前言: 这段时间接手了一个新需求,将一个ASP.NET MVC项目改成前后端分离项目.前端使用Vue,后端则是使用ASP.NET WebApi.在搭建完成前后端框架后,进行接口测试时发现了一个前后端分 ...

  8. Textbox输入状态提示

    前: <DockPanel Margin="> <TextBox SelectionChanged="TextBox_SelectionChanged" ...

  9. The command ("dfs.browser.action.delete") is undefined 解决Hadoop Eclipse插件报错

    Hadoop Eclipse插件 报错. 使用 hadoop-eclipse-kepler-plugin-2.2.0.jar 如下所示 Error Log 强迫症看了 受不了 The command ...

  10. Kafka Manager安装部署及使用

     为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager.本文对其进行部署配置,并安装配置kafkatool对k ...