JDK、JRE及JVM的关系及作用

1 、JDK

JDK(Java Development Kit)是java程序的开发工具集,包含了运行环境JRE、开发工具及基础类库等。

注意:

  1. 生产环境,目前使用JDK同时作为开发和运行环境的比较多,主要是为了排查问题方便的同时不用切换运行环境版本,但不建议在流量高峰时使用JDK工具来排查问题,因为很有可能因为使用不当而影响程序正常运行。
  2. 建议JDK选用LTS长期支持版本,截止当前时间,JDK的LTS版本有:8、11、17,建议至少选用8以上版本。

2 、JRE

JRE(Java Runtime Environment)是java程序的运行时环境,包含JVM标准实现和核心类库等。

在JDK安装路径或独立JRE安装路径下,有个名为jre或jrex.x.x_x(如:jre1.8.0_261)的目录,里面有两个文件夹bin和lib,可以理解为bin下是与JVM交互的工具,lib中则是JVM工作所需要依赖库,而bin和lib合起来可简单理解为jre环境。

注意:从JDK11开始,Java取消了独立的JRE安装包。

3 、JVM

JVM(Java Virtual Machine)是java程序运行的虚拟机,是java实现跨平台的最核心部分,它能够运行以java语言编写的任何软件程序。

因此,JDK、JRE及JVM的关系:JDK包含JRE,JRE包含JVM,所以它们之间的关系从大到小依次为:JDK->JRE->JVM。

注意:在JDK11之前,若我们使用了独立的JRE环境,此时JDK与JRE是同级关系,若我们使用JDK环境,此时JDK包含JRE环境。

4 、跨平台

  1. Java程序源代码会被编译成.class字节码文件;
  2. .class字节码文件会在JVM虚拟机上被加载解析;
  3. 虚拟机翻译.class成各平台运行指令,实现一次编译,到处运行;

5 、常见面试题

  1. 描述JDK、JRE及JVM之间的关系及各自作用?
  2. 简单描述Java程序一次编译,到处运行的流程?
相关推荐
2301_8092047017 分钟前
mysql在docker容器中如何部署_利用docker-compose快速启动
jvm·数据库·python
2301_815901974 小时前
SQL如何将多行记录聚合成逗号分隔字符串_GROUP_CONCAT技巧
jvm·数据库·python
zjy277775 小时前
Layui tab选项卡如何动态根据ID值进行程序化切换
jvm·数据库·python
m0_602857765 小时前
Redis如何修复槽位分配重叠的脏状态_使用redis-cli --cluster fix工具扫描并修复不一致的Slot
jvm·数据库·python
2301_766283445 小时前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
zhoutongsheng6 小时前
如何解决ORA-01078参数文件错误_pfile与spfile互相创建恢复
jvm·数据库·python
2401_824222696 小时前
HTML怎么标注字数限制提示_HTML实时字数统计占位【详解】
jvm·数据库·python
littleM7 小时前
深度拆解 HermesAgent(五):记忆系统与用户建模
jvm·人工智能·架构·ai编程
dfdfadffa7 小时前
如何创建仅在首次订阅时执行一次计算的 RxJS 懒加载 Observable
jvm·数据库·python
m0_624578597 小时前
SQL分组后如何计算移动平均值_利用窗口函数AVG配合ROWS
jvm·数据库·python