浅谈 JVM

简介: 浅谈 JVM

       最近看了点关于 JVM 的东西,这里简单的梳理并记录一下。并不保证我梳理的每一句都是正确的,但是对于我而言应该是最容易方便我记忆的。


       JVM 是每个 Java 程序员必学的内容,毕竟 Java 运行在 JVM 之上。就好比学习 C 语言一样,因为 C 语言编译连接后生成的二进制文件通过操作系统的装载器装在后,可以让其直接运行在 CPU 上,因此,去学习操作系统对 CPU 的调度、对内存的管理等知识可以很好的理解 C 语言代码编译连接后生成二进制文件的运行机制。而学习 Java 去学习 JVM 也是相同的道理。


       JVM 的全称是 Java Virtual Machine,就是 Java 虚拟机。它被称为虚拟机,但是它是建立在操作系统之上;对于 class 文件而言,JVM 就是操作系统了。那为什么 Java 编译后的 class 需要运行在虚拟机上,而 C 语言编译后的文件可以运行在 CPU 上呢?因为 Java 语言需要跨平台,但是各个平台的实现是不同的,因此 Java 的跨平台,实际上真正跨平台的是 JVM 的跨平台,它是对操作系统的一层抽象。如下图:

111111111.png

       从上图可以看出,JVM 是装载 .class 文件后,将 .class 文件的字节码转换为机器码由 CPU 进行运行。在我们通过 java 执行一个 .class 文件时(比如 HelloWorld.class)文件时,就会启动一个 JVM,此时 JVM 是操作系统上的一个进程,当程序执行完成后,JVM 进行随之退出。


       JVM 虽然是 Java 虚拟机,但是 JVM 是一个标准,通常我们说的 JVM 实际指的是 Oralce 的 HotSpot 实现。既然 JVM 是标准,那么就可以有多种实现。因此,JVM 除了 Oralce 的 HotSpot 外还有其他一些实现。每种实现的细节都会有所不同。这就好比软件的面向接口编程,接口定义在那里,调用时面向接口进行调用,具体实现根据不同的场景,实现自然不同。


       又因为 JVM 是标准,我们可以理解为它对 .class 文件进行了标准化,那么无论是什么语言,只要编译后的能生成符合 JVM 标准的 .class 文件,就可以运行在 JVM 之上。因此,有人说 Java 是跨平台语言,而 JVM 是跨语言的平台。如下图:

2222222.png

       JVM 实际是运行 .class 文件的,与具体的语言是无关的,只要编译后能生成符合 JVM 规范的 .class 文件即可。


       学习 JVM 我觉得就是学习 .class 文件的运行环境,它当中的很多知识和操作系统比较类似。操作系统中比较重要的就是 CPU 的管理和内存的管理,比如进程的调度、线程的调度,比如内存的段页式管理等。JVM 其实也是如此,比较常说的 JVM 的垃圾回收,不就是 JVM 对内存的管理方式么。


       补充:虚拟机这个概念是广义的,比如我们常用的 VMWARE、VBOX 是在物理机上又模拟了一台完整的计算机。JVM 是为了在操作系统之上构建更高抽象和跨平台而抽象出来的一个供 .class 文件运行的环境。操作系统其实也是一层虚拟机,它抽象和管理了 CPU、内存 和 I/O 等硬件。


       注:

1.还记得我开头的话么,内容不保证是对的。

2.当我看 JVM 相关的内容时,很快能想到和操作系统的知识相关联,可惜大部分操作系统的知识都已经忘记,不然以类比的方式进行学习,可能会更深入,更透彻。


相关文章
|
25天前
|
Java
jvm
jvm就是我们常说的java虚拟机,他是整个java实现跨平台的最核心 的部分,所有的java程序会首先被编译为.class的类文件,这种类文 件可以在虚拟机上执行。也就是说class并不直接与机器的操作系统 相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释 给本地系统执行。 只有jvm还不能成class的执行,因为再解释class的时候jvm需要调用 解释所需要的类库lib,而jre包含lib类库。jvm屏蔽了与具体操作系 统平台相关的信息,使得java程序只需生成在java虚拟机上运行的目 标代码(字节码)就可以在多种平台上不加修改地运行。
11 1
|
5月前
|
Java
JVM
JVM
35 0
|
1月前
|
存储 安全 前端开发
|
4月前
|
存储 Oracle Java
一文带你认识JVM
一文带你认识JVM
57 0
|
9月前
|
存储 缓存 安全
JVM的组成
JVM(Java虚拟机)是Java程序运行的核心组件,它负责将字节码文件解释成可执行代码并提供运行时环境。
72 0
|
4月前
|
缓存 算法 Java
【每日一面】关于JVM
【每日一面】关于JVM
19 0
|
8月前
|
存储 缓存 算法
JVM初探
JVM初探
|
8月前
|
存储 Java
Jvm基本组成
了解jvm基本组成
65 0
|
11月前
|
消息中间件 存储 算法
JVM - G1初探
JVM - G1初探
78 0