JVM、JRE、JDK

1、JVM(Java Virtual Machine)

JVM的作用

  • 字节码执行:JVM的主要任务是执行Java字节码。Java程序首先被编译成与平台无关的字节码(.class文件),这些字节码随后由JVM解释和执行。这样,Java程序可以在任何安装了JVM的设备上运行,而不需要修改代码。
  • 跨平台特性:JVM是“编写一次,运行到处”的关键所在。Java代码编译后生成的字节码可以在任何实现了JVM的操作系统或硬件平台上运行。因此,Java程序具有很强的跨平台能力。

JVM的结构

JVM由以下几个重要组件组成:

类加载器(Class Loader)

负责将Java字节码文件(.class文件)加载到内存中。它处理从不同来源(文件系统、网络等)加载类的过程,并且支持Java的动态类加载特性。

内存管理

:JVM管理着几种不同的内存区域,包括:

  • 堆(Heap):用于分配对象和数组的内存。所有Java对象都存储在堆中
  • 栈(Stack):每个线程都有自己的栈,用于存储局部变量、方法调用和返回值。
  • 方法区(Method Area):存储类的元数据、静态变量和常量池。
  • 本地方法栈(Native Method Stack):用于支持本地方法(即非Java代码,如C/C++编写的代码)的执行。
  • 程序计数器(Program Counter Register):记录每个线程所执行的字节码指令的位置。

执行引擎(Execution Engine)
执行加载到内存中的字节码,包括:

  • 解释器(Interpreter):逐行解释执行字节码指令。
  • 即时编译器(JIT Compiler):将热点代码(即频繁执行的代码)编译成机器码以提高执行速度。(这也就解释了为什么Java是编译与解释共存的语言)

垃圾回收(Garbage Collection):

  • 自动管理内存,回收不再使用的对象,防止内存泄漏。

JVM的工作流程

  • 编译和加载:Java源代码(.java文件)被编译器(javac)编译成字节码(.class文件)。
  • 类加载:类加载器将字节码加载到JVM内存中。
  • 字节码执行:执行引擎解释或编译字节码,将其转换为机器码,然后在物理硬件上执行。
  • 垃圾回收:JVM定期回收不再使用的内存空间,确保系统高效运行。

2、JDK(Java Development Kit)

JDK是Java的开发工具包,是开发Java应用程序所必需的。它包括编译器(javac)、Java应用程序的运行环境(JRE)、调试工具和文档工具等。使用JDK,开发者可以编写、编译、调试和运行Java代码。

  • JDK不仅包含JRE,还包含开发者所需的其他工具,如Java编译器和各种调试工具。因此,JDK是开发人员用来开发Java应用程序的完整工具包。

3、JRE(Java Runtime Environment)

JRE是Java运行环境,主要用于运行已经开发好的Java应用程序。它包括Java虚拟机(JVM)、核心类库以及支持Java程序运行的其他文件,但不包括编译器等开发工具。

  • 换句话说,JRE是Java应用程序运行时所需的最低环境,用户只需安装JRE便可运行Java程序,但无法编写和编译Java代码。
  • JRE中没有编译器,JRE不包括Java编译器(javac),所以它无法将Java源代码编译成字节码。JRE只能运行已经编译好的字节码(.class文件)
  • JRE使用场景:如果你已经有一个编译好的Java应用程序(例如,一个.jar文件),你只需要JRE来运行它,而不需要编译器。也就是说,JRE允许你在不需要编译代码的情况下执行Java程序。

总结来说,如果你只需要运行Java程序,安装JRE就足够了;如果你需要开发Java程序,则需要安装JDK。

  • JRE:只能运行已经编译好的Java程序,无法编写或编译Java代码。
  • JDK:包含了编写、编译和运行Java程序所需的所有工具。
  • JVM是Java程序运行时的核心组件,负责执行字节码。

补充:编译与运行的区别

  • 编译:编译是指将Java源代码(.java文件)转换为字节码(.class文件)的过程,这个过程由Java编译器(javac)完成。
  • 运行:运行是指执行编译后的字节码(.class文件),这个过程由JVM来完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值