一流程序员与二流程序员的分水岭:JVM虚拟机-全面理解

萨瓦迪卡2个月前 (09-22)jvm541

秉承一个信念,要学遍学底层逻辑。那是一通百通的底气。

一、学不学JVM 是自主解决问题的一流程序员与跟着别人做CRUD的二流程序员的分水岭。只有深入了解透彻jvm的工作过程及原理,才能对自己开发出高性能的代码充满信心。

二、JVM虚拟机的本质将class文件转换成操作系统具体的指令。
一个java文件从编写到执行的过程:通过javac将java文件编译成一个class文件交给虚拟机,虚拟机的工作过程如图:


d486157c-7b0e-44f5-a572-119c6318f819.png

1首先就是将classFile文件通过类加载(ClassLoader也就是个类)加载到jvm虚拟机的内存中。就是将类加载到就是方法区(元数据区)

2然后交给执行引擎,将类中指令解析出来执行,执行过程中会将类创建对象。

3再将对象创建到堆当中。

那要执行某个东西需要一个逻辑就是线程。因为只有线程是执行程序的唯一单元。在jvm内部,会对每一个线程分配一个虚拟机栈(左数第2列),它是一个先进后出的栈结构。在这个栈里面会记录当前线程运行的所需要的数据。


虚拟机栈(线程私有)核心包括:
 栈帧(会为每个方法创建一个专属的内存空间 ),栈帧又包含:
局部变量表:存放每个方法里的局部变量
操作数栈:这两个是执行java文件最基础的数据结构,记录我要执行这个方法需要多少的内存。局部变量对应的操作数。
动态链接库:是指向方法区的哪个方法
返回地址(方法出口):执行完返回到哪里
附加信息:jvm自己实现时附带的信息。
程序计数器:记录当前线程运行到哪一步了。

二、Class 文件规范

1、Class文件结构

实际上,我们需要了解的是,Java 官方实际上只定义了JVM的一种执行规范,也就是class文件的组织规范。理论上,只要你能够写出一个符合标准的class文件,就可以丢到 JVM 中执行。至于这个class文件是怎么来的,JVM 虚拟机是不管的。这也是 JVM 支持多语言的基础。
这个规范到底是什么样子呢?当然,你可以直接去看 Oracle 的官方文档。JDK8 的文档地址:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html 。后面也会有文章详细分析每一个字节。这里,我们只抽取主体内容。
比如,对于一个ByteCodeInterView.class文件,可以用 UltraEdit 工具打开一个class文件,看到的内容部分是这样的:

6d7ad69d-9884-463a-b89d-84fd381a0b6b.png

中间这一部分就是他的二进制内容。当然这是十六进制的表达。空格隔开的部分代表了 8 个bit,而每一位代表的是 4 个 bit字节,也就是一个十六进制的数字。例如 第一个字母 C 就表示十六进制的 12二进制是 1100。而所有的class文件,都必须以十六进制的 CAFEBABE 开头,这就是 JVM 规范的一部分。这也解释了 Java 这个词的由来,到底是一种咖啡,还是爪哇岛。

Spring6及springboot3已经用到jdk17了,但是我们jdk8 是跑不起来spring6的。

后面的部分就比较复杂了,没法直接看。可以用 javap指令可以直接来看一些class文件。比如:

b1b8939c-e33d-4fe1-aaa0-bc7815e81692.png

还是不容易查看或看懂,可以安装并使用插件:jclasslib Bytecode viewer图形化查看:

950429fd-f774-4ab9-aef7-bbe18e9a6f19.png

可以看到jvm的字节码,以及整个的执行过程:

6397a883-696f-494c-a12b-fdfa96d48ccc.png6397a883-696f-494c-a12b-fdfa96d48ccc.pngd9003aee-6ee3-4f2b-93ce-6231b23bbbe0.png

再就是LineNumbertable这里,说明第10行代码执行的 0到6的指令。

image.png

本文原创,转载必追究版权。

分享给朋友:

相关文章

js限制input只能输入数字、英文、汉字

 1.只能输入数字和英文的:  <input onkeyup="value=value.replace(/[\W]/g,'') "...

org.tigris.subversion.javahl.ClientException:Attempted to lock an already-locked dir

 svn更新或提交时候报错:org.tigris.subversion.javahl.ClientException:Attempted to lock an already-locke...

get/post方式调用http接口

get/post方式调用http接口

 1. 项目环境如下:myeclipse8.5 、tomcat5.0/weblogic、xp、JDK:开发1.5,编译1.4为了方便,在原来的web项目UpDown中新建了一个httpcal...

jquery 获取焦点

当文本框或下拉等必填时,如果没有输入就给予提示并使该文本框获得焦点!如果是js,对象.focus()即可。可是如果是jQuery, 这样$("#aa") 返回的就不是DOM对象而是...

java 实现自增编号+Oracle序列

原理:a,a++,fillStr(a, 9, false, "0");新建序列:create sequence seq_lineminvalue 1maxvalue 9999999...

Java判断是数字还是字符串

方法一:利用正则表达式public class Testone {public static void main(String[] ...

评论列表

2K影视
1个月前 (10-15)

这么好的帖子,应该加精华!https://www.2kdy.com

2K电影网
4周前 (10-24)

很多天不上线,一上线就看到这么给力的帖子!https://www.2kdy.com

免费电影
3周前 (10-27)

支持一个https://www.2kdy.com

2K电影网
3周前 (10-28)

顶顶更健康!https://www.2kdy.com

2K电影
3周前 (10-30)

东方不败还是灭绝师太啊?https://www.2kdy.com

2K电影
3周前 (11-01)

看了这么多帖子,第一次看到这么有深度了!https://www.2kdy.com

2K电影网
3周前 (11-01)

顶一个!https://www.2kdy.com

香蕉影院
2周前 (11-02)

我回帖楼主给加积分吗?https://www.xjtv1.com

香蕉影视
2周前 (11-03)

楼主很有艺术范!https://www.xjtv1.com

2K影视
2周前 (11-03)

我默默的回帖,从不声张!https://www.2kdy.com

香蕉电影
2周前 (11-03)

看帖不回帖都是耍流氓!https://www.xjtv1.com

香蕉影院
2周前 (11-04)

太高深了,理解力不够用了!https://www.xjtv1.com

香蕉电影
2周前 (11-04)

支持楼上的!https://www.xjtv1.com

香蕉影院
2周前 (11-05)

有机会找楼主好好聊聊!https://www.xjtv1.com

免费电影
2周前 (11-07)

支持一下,下面的保持队形!https://www.2kdy.com

2K影视
2周前 (11-08)

楼主是在找骂么?https://www.2kdy.com

2K电影网
1周前 (11-10)

收藏了,改天让朋友看看!https://www.2kdy.com

2K电影网
1周前 (11-11)

很经典,收藏了!https://www.2kdy.com

2K影院
1周前 (11-11)

你觉得该怎么做呢?https://www.2kdy.com

2K影视
7天前

强,我和我的小伙伴们都惊呆了!https://www.2kdy.com

免费电影
6天前

你觉得该怎么做呢?https://www.2kdy.com

2K影视
5天前

灌水不是我的目的!https://www.2kdy.com

2K电影
4天前

楼主很有艺术范!https://www.2kdy.com

TRX能量租赁
4天前

TRX能量租赁 - 0.8TRX=13万能量 直接节省80%!无视对方有没有U或者是否交易所- 复制地址【TAZdAh5LU55aUPPZkgF4rupQwg6inQ5J5X】转 0.8 TRX即可0手续费转账!TG机器人频道:@xingtahttps://www.23123.top/

TRX能量租赁
4天前

TRX能量租赁 - 0.8TRX=13万能量 直接节省80%!无视对方有没有U或者是否交易所- 复制地址【TAZdAh5LU55aUPPZkgF4rupQwg6inQ5J5X】转 0.8 TRX即可0手续费转账!TG机器人频道:@xingtahttps://www.23123.top/

TRX能量租赁
3天前

TRX能量租赁 - 0.8TRX=13万能量 直接节省80%!无视对方有没有U或者是否交易所- 复制地址【TAZdAh5LU55aUPPZkgF4rupQwg6inQ5J5X】转 0.8 TRX即可0手续费转账!TG机器人频道:@xingtahttps://www.23123.top/

TRX能量租赁
3天前

TRX能量租赁 - 0.8TRX=13万能量 直接节省80%!无视对方有没有U或者是否交易所- 复制地址【TAZdAh5LU55aUPPZkgF4rupQwg6inQ5J5X】转 0.8 TRX即可0手续费转账!TG机器人频道:@xingtahttps://www.23123.top/

TRX能量租赁
2天前

TRX能量租赁 - 0.8TRX=13万能量 直接节省80%!无视对方有没有U或者是否交易所- 复制地址【TAZdAh5LU55aUPPZkgF4rupQwg6inQ5J5X】转 0.8 TRX即可0手续费转账!TG机器人频道:@xingtahttps://www.23123.top/

TRX能量租赁
2天前

TRX能量租赁 - 0.8TRX=13万能量 直接节省80%!无视对方有没有U或者是否交易所- 复制地址【TAZdAh5LU55aUPPZkgF4rupQwg6inQ5J5X】转 0.8 TRX即可0手续费转账!TG机器人频道:@xingtahttps://www.23123.top/

免费电影
19小时前

楼主说的我也略懂!https://www.2kdy.com

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。