JVM总览

在AI的加持下,似乎整理输出一些查重率几乎100%的文章已经没有什么意义了,毕竟stack overflow的流量都断崖式下跌(终于不用从CSDN里面抛吃的了🫠),从对外部来讲没什么意义不过从对昨天的自己的来讲还是有那么一点点意义,至少在敲下文字的这段时间,没有被空虚迷惘无意义等打扰。

对于传统的物理机,指令集(Instruction-Set Architecture)作为连接硬件与软件的中间层,指令集下面硬件负责实现指令集的语义,指令集上面则是这种抽象的高级语言。

而对于java虚拟机,也可以理解为字节码作为这个中间层,字节码下面是JVM,上面则是java/kotlin/Scala等高级语言。对于c语言,我们从ascii字符开始编译链接成elf文件,然后加载进入进程的地址空间,然后修改pc寄存器,完成状态机的初始化,进而CPU开始无情的执行指令。那么对于jvm呢?我们编译成的class文件,如何被加载进入内存?在jvm中内存布局又是怎样?指令如何执行的呢?

三个概念

specification 规范

implementation 实现

runtime instance 运行实例,每一次java hello 就创建了一个jvm的运行实例

一张图

image-20250506105607813

简单介绍:

java文件被编译成class文件。

class文件就是一个数据结构。

然后将class文件输入给加载器,加载器输出方法区类信息+heap中Class< T >对象。

加载完毕后,执行引擎开始解释执行java字节码,同时对高频代码通过JIT(Java Intime Compiler)编译成汇编代码。

最后在整个过程中垃圾回收,一直默默提供支持。

主要参考资料:https://www.jyt0532.com