JDK、SDK、JRE、JVM—初识01

本文通过HelloWorld示例清晰地解析了JDK、SDK、JRE和JVM的概念及其相互关系,阐述了它们在Java程序开发与运行中的作用。

JDK、SDK、JRE、JVM概念的理解是什么呢?我们经常在进行初级学习的时候JDK、SDK、JRE、JVM概念老是混淆,那么本文讲给你点启示。


 


图片信息来源于51cto

 

 

JDK、SDK、JRE、JVM概念的认识我们可以通过HelloWorld来理解这几个缩写词的具体含义:

public class HelloWorld {  

  public static void main(String[] args) {   

   System.out.println("helloworld");   

  }  

编译之后, 我们得到了HelloWorld.class(图中的"Your program's class files")

在HelloWorld里面, 我们调用了 JAVA API中的 java.lang.System这个类的静态成员对象 out, out 的静态方法: public static void println(String string);

然后我们让虚拟机器来执行这个HelloWorld。

1. 虚拟机会在classpath中找到HelloWorld.class。

2. 虚拟机中的解释器(interpret)会把HelloWorld.class解释成字节码。

3. 把解释后的字节码交由execution engin执行。

4. execution engin会调用native method(即平台相关的字节码)来在host system的stdout(显示器)的指定部分打印出指定的字符串。

5. 这样, 我们就看到"helloworld"字样了。

有了这个流程后, 我们就好理解上面几个术语了:

◆JDK: Java develop kit (Java 开发包)

◆SDK: software develop kit, 以前JDK 叫做Java software develop kit, 后来出了1.2版本后, 就改名叫JDK了, 省时省力, 节约成本。

◆JRE. Java runtime environment 我们的helloworld必须在JRE(Java运行环境,Java运行环境又叫Java平台)里面, 才能跑起来。 所以, 显然地, JRE其实就是JDK + JVM

◆JVM Java virtual machine. 简单地讲, 就是把class文件变成字节码, 然后送到excution engin中执行。 而为什么叫虚拟机, 而不叫真实机呢? 因为JVM本身是又不能运算, 又不能让显示器显示"helloworld"的, 它只能再调用host system的API, 比如在w32里面就会调c++的API, 来让CPU帮他做做算术运算, 来调用c++里面的API来控制显示器显示显示字符串。 而这些API不是JDK里面有的,我们平时又看不见的,所以我们就叫它native api了

◆解释平台无关。 有人会说, 在linux的里面调用native api与w32里面调用的api肯定不一样吧? 那为什么说Java是平台无关的呢?

其实是这样的, 君不见java.sun.com里面又有jdk-for-w32又有jdk-for-linux下载吗? 刚才不是说了吗? native api, native api, 就是我们平时看不见的api吗! 调用native这些烦琐的活儿都让jdk去做了。 所以我们调用的时候只用知道jdk(Java api) 里面的java.io.*能提供磁盘访问功能, java.awt.* 能画个框框画个圆圆就行了吗。 至于JDK又是怎么调用的, 在LINXU上更圆呢? 还是在W32上更圆,这个就是JDK个人的事情了。(理论上讲是一样圆的, 当然这又和显示器是否纯平相关了)

同时, 这里就引申出了另一个话题。 既如何编写平台无关的Java程序。 其中关键的一条, 就是调用且只调用jdk中的API, 而不要私自调用native api。 原因很简单啊, JDK-for-linux和JDK-for-w32表面都是一样的, 所以我在w32里面调用JDK写的Java程序,在linux里面也会一样的写法啊, 所以就可以移植来移植去都没问题。但是如果我在w32里面调用了 一个图形显示的native api, 当我移植到linux去的时候, 谁又能保证里面也有相同名称, 相同参数,相同返回值, 相同功能的native api供我调用呢!

JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 

 

 

 

### JDKJREJVM 的关系与区别 #### 1. **定义** - **JVM (Java Virtual Machine)** JVM 是一种抽象的计算机,它是 Java 程序的实际运行环境。其主要功能包括加载字节码、验证字节码、执行字节码以及提供内存管理和垃圾回收等功能[^2]。通过 JVMJava 实现了“一次编写,到处运行”的特性。 - **JRE (Java Runtime Environment)** JREJava 运行时环境,包含了运行 Java 应用程序所需的一切资源,其中包括 JVM 和核心类库(如 `rt.jar`)。因此,JRE 提供了一个完整的运行环境来执行 `.class` 文件[^1]。 - **JDK (Java Development Kit)** JDKJava 开发工具包,专为开发者设计。它不仅包含 JRE 中的所有组件,还提供了额外的开发工具,例如编译器 (`javac`)、打包工具 (`jar`) 和文档生成工具 (`javadoc`) 等。这些工具帮助开发者创建和调试 Java 应用程序[^1]。 --- #### 2. **区别** | 特性 | **JVM** | **JRE** | **JDK** | |-----------------|---------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------| | 主要用途 | 执行 Java 字节码 | 提供运行 Java 应用所需的完整环境 | 提供开发和运行 Java 应用的全套工具 | | 是否独立存在 | 不可以单独存在,依赖于 JRE 或其他实现 | 可以独立安装并运行 | 包含 JRE,可以直接运行应用 | | 关键组成部分 | 加载器、解释器、垃圾收集器 | JVM + 核心类库 | 编译器 (`javac`)、打包工具 (`jar`)、调试工具等 | | 面向人群 | 用户无需关心 | 终端用户 | 开发人员 | 具体来说: - **JDK vs JRE**: JDK 包括 JRE 并扩展了它的功能,增加了许多开发工具。对于终端用户而言,只需安装 JRE 即可运行 Java 应用;而对于开发者,则需要安装 JDK 来构建应用程序[^1]。 - **JRE vs JVM**: JRE 是一个更全面的概念,除了包含 JVM 外,还包括标准库和其他支持文件。如果缺少 JRE 下的类库(如 `rt.jar`),即使有 JVM 也无法正常运行 Java 程序。 --- #### 3. **关系** - **层次结构**: JDKJREJVM JDK 包含 JRE,而 JRE 则进一步封装了 JVM 和必要的类库。这意味着,当开发者使用 JDK 创建的应用被部署到用户的机器上时,实际上只依赖于目标机器上的 JRE 或其中的 JVM[^3]。 - **协作机制**: 当开发者写好一段 Java 源代码后,会先利用 JDK 中的 `javac` 将源代码编译成字节码(`.class` 文件)。随后,在运行阶段,由 JRE 中的 JVM 解析并执行该字节码。整个过程体现了三者的紧密合作。 --- ```python # 示例:如何使用 JDK 工具完成简单的 Java 开发流程 # 假设有一个名为 HelloWorld.java 的简单程序 print("Hello, World!") # 使用 javac 编译 !javac HelloWorld.java # 使用 java 命令运行编译后的 .class 文件 !java HelloWorld ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值