Java虚拟机01-JAVA体系结构

JAVA 技术体系

  • JDK 即为 Java 开发工具包,包含编写 Java 程序所必须的编译、运行等开发工具以及 JRE

  • JRE 即为 Java 运行环境,提供了运行 Java 应用程序所必须的软件环境,包含有 Java 虚拟机(JVM)和丰富的系统类库。系统类库即为 Java 提前封装好的功能类,只需拿来直接使用即可,可以大大的提高开发效率。

  • JVM 即为 Java 虚拟机,提供了字节码文件(.class)的运行环境支持。

Java虚拟机01-JAVA体系结构_第1张图片
技术体系.png

JAVA 运行流程

Java虚拟机01-JAVA体系结构_第2张图片
JAVA 运行流程.gif
  • 首先我们需要并通过Java编译器将Java源代码.java文件编译为.class文件。.class文件包含了JVM虚拟机所能识别的指令序列,也称 Java 字节码

  • JAVA虚拟机通过类加载器将.class文件中Java 字节码将加载到Java虚拟机中内存中。加载后的Java 字节码会被存放于方法区(MethodArea)中。实际运行时,JAVA虚拟机能够以正确方式读取执行方法区内每一条字节码指令。

  • 在HotSpot 里面,上述翻译过程有两种形式:第一种是解释执行,即逐条将字节码翻译成机器码并执行;第二种是即时编译(Just-In-Time compilation,JIT),即将一个方法中包含的所有字节码编译成机器码后再执行。

  • 由于JVM虚拟机是运行在操作系统之上的,Java字节码无法直接执行。因此Java 虚拟机需要将字节码翻译成机器码,在通过操作系统转换为指令集调用底层硬件服务执行。

Java 要在虚拟机里运行

  • Java 虚拟机可以由硬件实现,但更为常见的是在各个现有平台(如 Windows_x64、Linux_aarch64)上提供软件实现。这么做的意义在于,一旦一个程序被转换成 Java 字节码,那么它便可以在不同平台上的虚拟机实现里运行。这也就是我们经常说的“一次编写,到处运行”。
Java虚拟机01-JAVA体系结构_第3张图片
jvm实现.gif
  • 虚拟机的另外一个好处是它带来了一个托管环境(Managed Runtime)。这个托管环境能够代替我们处理一些代码中冗长而且容易出错的部分。其中最广为人知的当属自动内存管理与垃圾回收,这部分内容甚至催生了一波垃圾回收调优的业务。

  • 除此之外,托管环境还提供了诸如数组越界、动态类型、安全权限等等的动态检测,使我们免于书写这些无关业务逻辑的代码。

JAVA中分层设计

Java虚拟机01-JAVA体系结构_第4张图片
Java语言在JVM上的执行.gif
  • 从上图可以发现Java是运行在JVM之上的。但是Java语言和JVM没有必然的联系。Java语言并不是只能运行在JVM之上,例如Java可以被编译为本地代码直接运行在操作系统之上,比如,Linux上的GCJ(GNU Compiler for Java)就可以把Java语言编译为本地代码直接执行。

  • 同样的,JVM上也不是只能执行Java语言,只要实现了适当的编译器,将其他语言编译为JVM上的字节码,就可以在JVM上运行。比如,JRuby,Jython以及Groovy等其他JVM语言,都会通过相应的编译器或是解释器转化为.class,然后再JVM上运行。

你可能感兴趣的:(Java虚拟机01-JAVA体系结构)