前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JVM 札记】浅谈 JVM

【JVM 札记】浅谈 JVM

作者头像
码农UP2U
发布2023-02-18 17:02:40
2860
发布2023-02-18 17:02:40
举报
文章被收录于专栏:码农UP2U码农UP2U

最近看了点关于 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 的跨平台,它是对操作系统的一层抽象。如下图:

从上图可以看出,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 是跨语言的平台。如下图:

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

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

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

注:

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农UP2U 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档