Java教程02—Java虚拟机(JVM)、和JDK,JRE之间的区别

  • JVM主要功能
  • JVM结构
  • JVM与JRE与JDK区别

JVM主要功能

Java是一种高级编程语言。
用高级语言编写的程序不能直接在任何机器上运行。
首先,需要将其翻译成特定的机器语言,javac编译器就专门来干这个事儿的,它把Java程序(含有的.java源代码文件)转换成机器代码(称为字节码或.class文件)。

Java虚拟机(JVM)是安装在我们计算机中的虚拟机,JVM自己的机器语言是字节码。
这样子Javac编译器就好处理啦,因为它只需要为JVM生成字节码就行了,而不是为每种类型的机器生成不同的机器代码。

JVM执行Javac编译器生成的字节码并生成输出就OK了。JVM正是java跨平台的原因。
所以,现在我们知道JVM的主要功能是执行编译器生成的字节码

每个操作系统都有不同的JVM,但是在执行字节码后它们产生的输出在所有操作系统中都是相同的。
这意味着在Windows上生成的字节代码可以在Mac OS上运行,反之亦然。
这就是我们将java称为平台无关语言的原因,下图展示了这个过程:
Java教程02—Java虚拟机(JVM)、和JDK,JRE之间的区别_第1张图片


JVM总结:
Java虚拟机(JVM)是在实际机器(您的计算机)上运行并执行Java字节代码的虚拟机。
JVM不了解Java源代码,这就是为什么我们需要使用javac编译器来编译* .java文件, 从而获取包含JVM理解的字节代码的* .class文件。
JVM使java可移植(一次编写,随处运行)。
每个操作系统都有不同的JVM,但是在执行字节代码后它们产生的输出在所有操作系统中都是相同的。


JVM结构

来张JVM的结构图:
Java教程02—Java虚拟机(JVM)、和JDK,JRE之间的区别_第2张图片
让我们看看JVM是如何工作的:
Class Loader(类加载器): 类加载器读取.class文件并将字节码保存在方法区中。

Method Area(方法区域):JVM中只有一个方法区域,它在所有类之间共享。这各区域保存了每个.class文件的类的级别信息。

Heap(堆): 堆是为对象分配内存占用的JVM内存的一部分。JVM为每个.class文件创建一个类对象。

Stack(栈):栈也是JVM内存的一部分,但与Heap不同,它用于存储临时变量。

PC Registers(PC寄存器): 这可以跟踪已执行的指令以及将要执行的指令。由于指令由线程执行,因此每个线程都有一个单独的PC寄存器。

Native Method stack(Native Method 栈): 一个native method(非Java语言实现的方法)可以访问虚拟机的运行时数据区域。.

Native Method interface(Native Method 接口): 它使java代码能够被本机应用程序调用或被调用。本机应用程序是特定于系统的硬件和操作系统的程序。

Garbage collection(垃圾收集):类代码由java代码显式创建,在使用后,它会被垃圾收集自动销毁以进行内存管理。


JVM与JRE与JDK区别

JRE:JRE是java虚拟机运行的环境。JRE包含Java虚拟机(JVM),类库和其他文件,不包括编译器和调试器等开发工具。
这意味着您可以在JRE中运行代码,但无法在JRE中开发和编译代码。

JVM:如上所述,JVM通过使用JRE提供的类,库和文件来运行程序。
Java教程02—Java虚拟机(JVM)、和JDK,JRE之间的区别_第3张图片

JDK:JDK是JRE的超集,它包含JRE与开发工具(如编译器,调试器等)的所有内容。
Java教程02—Java虚拟机(JVM)、和JDK,JRE之间的区别_第4张图片


原文地址:
https://beginnersbook.com/2013/05/jvm/

你可能感兴趣的:(Java教程(翻译))