浅谈 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 相关的内容时,很快能想到和操作系统的知识相关联,可惜大部分操作系统的知识都已经忘记,不然以类比的方式进行学习,可能会更深入,更透彻。


相关文章
|
2月前
|
存储 Java Unix
深入理解JVM(三)
深入理解JVM(三)
|
Java
JVM
JVM
79 0
|
6月前
|
存储 算法 Java
|
6月前
|
算法 Java Linux
深入理解JVM - Shenadoah
深入理解JVM - Shenadoah
81 1
|
6月前
|
缓存 算法 Java
【每日一面】关于JVM
【每日一面】关于JVM
43 0
|
存储 缓存 算法
JVM2
JVM2
114 0
|
Java Linux Go
必知必会JVM一-什么是JVM?
必知必会JVM一-什么是JVM?
121 0
|
存储 Rust JavaScript
Jvm 必须要了解的知识
Java Virtual Machine(Java 虚拟机)有三层含义,分别是: JVM规范要求 满足 JVM 规范要求的一种具体实现(一种计算机程序) 一个 JVM 运行实例,在命令提示符下编写 Java 命令以运行 Java 类时,都会创建一 个 JVM 实例,我们下面如果只记到JVM则指的是这个含义;如果我们带上了某种JVM 的名称,比如说是Zing JVM,则表示上面第二种含义
239 0
|
存储 数据可视化 Java
JVM系列之:关于HSDB的一点心得(一)
JVM系列之:关于HSDB的一点心得(一)
653 0
JVM系列之:关于HSDB的一点心得(一)
|
Java Android开发 Windows
JVM系列之:关于HSDB的一点心得(二)
JVM系列之:关于HSDB的一点心得(二)
317 0
JVM系列之:关于HSDB的一点心得(二)