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. postman全局变量设置

    1.点击小齿轮进入到变量添加页面,点击Globals添加全局变量 2.输入变量名称和变量值 3.接口中设置变量

  2. AWD脚本之批量mysql写shell

    摘之工具包中脚本 需要安装mysqldb.windwos环境直接在https://www.codegood.com/archives/129下载MySQL-python-1.2.3.win-amd64 ...

  3. cmake::编译一个工程

    1.编译工程,构建过程产生的临时文件等文件与源码隔离,避免源码被污染. # CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8) # 项目信息 proj ...

  4. vue——前端跨域

    ***针对的是不同域名.不同协议的跨域: 1.找到config文件中开发环境的配置文件——dev.env.js,在里面将要跨域的域名配置进去 2.找到config文件中线上环境的配置文件——prod. ...

  5. i春秋DMZ大型靶场实验(三)内网转发DMZ2

    更具实验文件知道存在源码泄露  下载源码进行源码审计 发现admin账号 查看user.php 发现mysql 账号 端口 对登录后源码进行审计 发现上传文件的两处漏洞 对 fiel name 可以 ...

  6. Springboot项目的jar包目录结构

    上图为一个由Luyten工具反编译后的一个jar包 说明: SpringBoot提供的bootstrap的类是放到包的最外面,比如上面的org.springframework.boot.loader. ...

  7. StreamWriter 相关知识分享

    在介绍StreamWriter之前,我们首先来了解一下它的父类TextWriter. 一.TextWriter 1.TextWriter的构造函数和常用属性方法 下面是TextWriter的构造函数: ...

  8. 向net core 3.0进击——项目发布与部署

    目录 前言 发布 测试 小结 前言 在经历过好多折腾后,总算是把部署走通了一遍,之前只是简单创建个工程在linux下部署,后来一直将这件事搁置,直到最近刚好团队入手一个小服务器,很显然是linux的, ...

  9. justjavac(迷渡)知乎live--<<前端工程师的入门与进阶>>听讲总结

    知乎听讲总结 知乎live----jjc<前端工程师的入门进阶> git地址 内容 前端的基础知识,计算机专业基础知识感觉还行.前端后台都有做过,现在觉得自己要深入.但是只看框架源码和自己 ...

  10. APP打包设置程序版本号

    正确设置方式是: 注意,以下修改不会起作用<manifestxmlns:android="http://schemas.android.com/apk/res/android" ...