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. 利用 js 的一些函数调用,排序

    编辑器:Sublime Text 3 1.冒泡排序 let arr = new Array(5,9,3,6,7,8,4,2,);bubbleSort(arr);console.log(arr);fun ...

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

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

  3. HDU 1532 Drainage Ditches(最大流 EK算法)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1532 思路: 网络流最大流的入门题,直接套模板即可~ 注意坑点是:有重边!!读数据的时候要用“+=”替 ...

  4. 16.Linux yum扩展

    1.列出yum源可用的软件仓库 [root@yinwucheng ~]# yum repolist [root@yinwucheng ~]# yum repolist all 查看所有的仓库  ``` ...

  5. 【MongoDB详细使用教程】二、MongoDB基本操作

    目录 数据类型 数据库操作 集合操作 数据操作 增 查 改 修改整行 修改指定字段的值 删 数据类型 MongoDB常见类型 说明 Object ID 文档ID String 字符串,最常用,必须是有 ...

  6. javascript学习 first-day

    1.javascript是一种客户端语言,设计它的目的是在用户的机器上而不是服务器上执行任务. 1.1 javascript不允许写服务器机器上的语言:   1.2 Javascript不能关闭不是由 ...

  7. 解决js计算0.1+0.2 !==0.3

    经常做用js数据运算的同学应该了解,在js中,0.1+0.2不会等于0.3,而是等于: 我一开始发现这个bug的时候也觉得很奇怪,那怎么去解决这个bug,让0.1+0.2 最后能得到0.3呢? 方法一 ...

  8. JVM(3) 垃圾收集器与内存分配策略

    一.垃圾收集的概念 在Java虚拟机运行时数据区中程序计数器.虚拟机栈和本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作,每一个栈帧中分配多少内 ...

  9. 如何在vue里引入Bootstrap

    一.引入jquery 步骤: 1. 安装jquery $ npm install jquery --save-dev 2.在webpack.config.js 添加内容 + const webpack ...

  10. vue 列表的排序过渡 shuffle遇到的问题

    内部的实现,Vue 使用了一个叫 FLIP 简单的动画队列使用 transforms 将元素从之前的位置平滑过渡新的位置 需要注意的是使用 FLIP 过渡的元素不能设置为 display: inlin ...