【JVM学习】1.JVM基础知识


1 JVM 从编译到执行

首先给出基于JDK8的JAVA SE产品组件,里面包含了JDK,JRE,JVM三者之间的关系:

the components of Oracle's Java SE products

JVM:Java Virtual Machine,可运行 Java 代码的抽象计算机,包括一套字节码指令集一组寄存器一个栈一个垃圾回收一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互

JRE:Java Runtime Environment,除了包含 JVM 之外,提供了很多的类库(就是我们说的 jar 包,它可以提供一些即插即用的功能,比如读取或者操作文件,连接网络,使用 I/O 等等之类的),这些东西就是 JRE 提供的基础类库

JDK:Java Development Kits,包含JRE,还有一些非常好用的小工具,比如 javac(编译代码)、javajar (打包代码)、javap(反编译<反汇编>)等。

1.1 Java 程序的执行过程

一个 Java 程序,首先经过 javac 编译成 .class 文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。JVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。
过程如下:Java 文件 -> 编译器 -> 字节码 -> JVM -> 机器码

Java 程序的执行过程

1.2 从跨平台到跨语言

跨平台:我们写的一个类,在不同的操作系统上(Linux、Windows、MacOS 等平台)执行,效果是一样,这个就是 JVM 的跨平台性。 为了实现跨平台型,不同操作系统有对应的 JDK 的版本。

不同操作系统的JDK版本

跨语言(语言无关性):JVM 只识别字节码,所以 JVM 其实跟语言是解耦的,也就是没有直接关联,JVM 运行不是翻译 Java 文件,而是识别 class 文件,这个一般称之为字节码。还有像 GroovyKotlinScala 等等语言,它们其实也是编译成字节码,所以它们也可以在 JVM 上面跑,这个就是 JVM 的跨语言特征。Java 的跨语言性一定程度上奠定了非常强大的 java 语言生态圈。

跨平台到跨语言

2 JVM 的发展

常见的 JVM:

常见的JVM

3 JVM 整体知识模块

JVM 能涉及非常庞大的一块知识体系,比如内存结构垃圾回收类加载性能调优JVM 自身优化技术执行引擎类文件结构监控工具等。 但是在所有的知识体系中,都或多或少跟内存结构有一定的关系: 比如垃圾回收回收的就是内存、类加载加载到的地方也是内存、性能优化也涉及到内存优化、执行引擎与内存密不可分、类文件结构与内存的设计有关系,监控工具也会监控内存。所以内存结构处于 JVM 中核心位置。也是属于我们入门 JVM 学习的最好的选择。

同时 JVM 是一个虚拟化的操作系统,所以除了要虚拟指令之外,最重要的一个事情就是需要虚拟化内存,这个虚拟化内存就是我们马上要讲到的 JVM 的内存区域。下章见分晓。

JVM 整体知识模块

文章作者: Kezade
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kezade !
评论
  目录