【JVM】Java Virtual Machine全文导航

絮絮叨叨:为什么会想写这个系列的文章?
我自己看了许多的关于JVM的书籍和视频,但是还是感觉众位前辈大佬们将JVM每一部分切的太碎,导致自己总是记住东边忘西边,我时常在想为什么记不住,有一次偶然灵感爆发,我觉得我记不住不是因为记性不好,而是没有一个全局视角,JVM本就是一个协同工作的整体,我为什么一定要分开来一块一块的学习呢?于是就有了这个系列文章。

1. JVM整体架构图

JVM整体架构
上图中,我们看到整个程序的入口是.class文件,其实在此之前我们还做了很多的事情,这些事情并不属于JVM的管辖范畴,而是属于JDK的范畴,大致步骤为使用javac命令将.java文件编译为.class文件,使用java命令启动Java虚拟机。

1.1 类装载子系统

当你使用java命令启动含有main函数的java程序,这时候就启动了一个Java虚拟机,其首先会运行类装载子系统,将需要用到的class文件加载至运行时数据区。

1.2 运行时数据区

运行时数据区主要负责管理内存,存储数据。

1.3 执行引擎

执行引擎不断地与运行时数据区交互,完成代码的执行

1.4 本地方法接口

当然有一些java方法其实是调用的c的方法,因此执行引擎也不断地在与本地方法接口交互,本地方法执行也需要使用内存,因此本地方法也不断地与运行时数据区交互。


上面的架构图只是小试牛刀,其实我们还是不知道JVM是怎样运行的,那么接下来我们一步一步破解JVM运行的秘密。为了保主干清晰,下面的所有的介绍都将跳转到我的另一篇文章,其实你也可以把这篇文章当作JVM的一个目录或者导航。

2. 过程1:class文件的静态解读

抛开我直接告诉你的架构图,我们还是不知道JVM是怎样成功运行起来的,但是我们知道想要运行java程序,首先需要将.java文件编译成.class文件,这里貌似隐藏着我们的第一步,我们首先先看一看class文件的秘密吧。
链接

3. 过程2:class文件的加载

在这里插入图片描述
我们把运行时数据区拆开了讲,就可以看到上图的结构

  1. 方法区:当.class文件被类加载子系统加载到内存时,会对每个类生成一个Class文件,其被放在方法区,也就是说没有方法区就没有类。
  2. Java程序都是从某个主线程的main方法开始执行的,JVM会为每个线程创建一个调用栈,而main方法会作为栈帧被压入调用栈的最底部。
  3. PC寄存器每个线程都有一份,记录着下一条待执行指令的地址
  4. 堆中存放着对象,然后由栈帧中的局部变量表引用该对象。
  5. Java的部分方法是由native关键字标识,说明该方法调用的是c方法,因此我们需要使用到操作系统的本地方法,所以JVM由一个本地方法栈。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JVMJava Virtual MachineJava虚拟机)的缩写,它是一种用于计算设备的规范,通过在实际的计算机上仿真模拟各种计算机功能来实现。JVM包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。它的主要任务是运行Java程序,使得Java程序可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。每个Java程序启动时都会产生一个JVM实例,当程序运行结束时,该实例也会消失。JVM是基于堆栈的虚拟机,为每个新创建的线程都分配一个堆栈,通过对堆栈的操作来完成Java程序的运行。JVM对堆栈进行以帧为单位的压栈和出栈操作。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Java虚拟机Java Virtual Machine(JVM)总结(基于jdk 1.8)](https://blog.csdn.net/weixin_40923145/article/details/88602359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java虚拟机JVM学习笔记](https://blog.csdn.net/x_panda/article/details/14215819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tinpo_123

感谢给小张填杯java~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值