当前位置: 首页 > news >正文

JDK,JRE,JVM三者的区别

Java学习

随堂笔记

JDK>JRE>JVM,jdk(Java development kit )包含了jre(java runtime environment)和JVM(Java Virtual Machine)

JDK,JRE,JVM三者关系概括如下:

jdk是JAVA程序开发时用的开发工具包,其内部也有JRE运行环境JRE。JRE是JAVA程序运行时需要的运行环境,就是bai说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的JAVA程序了。JDk、JRE内部都包含JAVA虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
JVM :JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。JVM是Java平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行时操作不同的内存区域。 JVM通过抽象操作系统和CPU结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方法、主机硬件、主机操作系统无关。JVM的主要工作是解释自己的指令集(即字节码)到CPU的指令集或对应的系统调用,保护用户免被恶意程序骚扰。 JVM对上层的Java源文件是不关心的,它关注的只是由源文件生成的类文件(.class文件)。
JRE:JRE是java runtime environment(java运行环境)的缩写。光有JVM还不能让class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了(jre里有运行.class的java.exe)。JRE是Sun公司发布的一个更大的系统,它里面就有一个JVM。JRE就与具体的CPU结构和操作系统有关,是运行Java程序必不可少的(除非用其他一些编译环境编译成.exe可执行文件……),JRE的地位就象一台PC机一样,我们写好的Win32应用程序需要操作系统帮我们运行,同样的,我们编写的Java程序也必须要JRE才能运行。
JDK:JDK是java development kit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那 让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、jre。现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。
bin:最主要的是编译器(javac.exe)
include:java和JVM交互用的头文件
lib:类库
jre:java运行环境
(注意:这里的bin、lib文件夹和jre里的bin、lib是不同的)总的来说JDK是用于java程序的开发,而jre则是只能运行class而没有编译的功能。eclipse、idea等其他IDE有自己的编译器而不是用JDK bin目录中自带的,所以在安装时你会发现他们只要求你选jre路径就ok了

相关文章:

  • 2020-12-01
  • 2020-12-02
  • 比较三个数字,求出最大值
  • Scanner限制次数猜数字
  • ArrayList,随机抽取6个数字在【1-33】中的随机数,并且遍历
  • 利用ArrayList遍历集合
  • 用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合中
  • String的用法截取,转换,切割
  • 由{1,2,3}转换成[word1#word2#word3#]]
  • 统计大写小写数字和其他字符串
  • static的用法静态方法的注意事项
  • Static的补充
  • Arrays的补充
  • Arrays的使用
  • Math的使用。
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ➹使用webpack配置多页面应用(MPA)
  • Golang-长连接-状态推送
  • JavaScript HTML DOM
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Redis 中的布隆过滤器
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue UI框架库开发介绍
  • 初识MongoDB分片
  • 聊聊directory traversal attack
  • 实战|智能家居行业移动应用性能分析
  • 说说动画卡顿的解决方案
  • 源码安装memcached和php memcache扩展
  • 正则表达式
  • 转载:[译] 内容加速黑科技趣谈
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $.ajax()
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (四)Linux Shell编程——输入输出重定向
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (循环依赖问题)学习spring的第九天
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)http协议
  • (转)人的集合论——移山之道
  • .bat批处理(六):替换字符串中匹配的子串
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET : 在VS2008中计算代码度量值
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET运行机制
  • @Autowired标签与 @Resource标签 的区别
  • @Controller和@RestController的区别?
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ Linux ] git工具的基本使用(仓库的构建,提交)