JVM之认识程序运行本质

30 篇文章 7 订阅
11 篇文章 2 订阅

JVM是什么

刚入门的时候老师教我们写代码是这样的:

写JAVA文件然后用javac命令编译成class文件运行即可。

随着学习的不断拓展和工作中业务代码的积累,对于“为什么会这样”的困惑越来越多,于是写了这篇博客~。

计算机能看懂的是二进制,也就是0和1。那么我们的JAVA程序和计算机又有什么关联呢?他们是怎么联系到一起的?

汇编语言

计算机只能识别0和1,人们发现利用0和1可以做很多事情:

比如可以做加法,由此减乘法除法(利用的也是加法)也可以做到;与,或,异或等这些构成了与门,非门等这些逻辑门;…在这上面进行扩展又可以做很多事情。

但是编写0和1太过于麻烦,这个时候出现了助记符也就是用一个英文代表一串01的数字,也就是汇编语言。

高级语言

对于开发者来说,用汇编写代码不太现实,一个简单的操作要用很多行汇编代码才能实现,所以再它之上做了处理,比如java,c,等等高级语言。那么计算机怎么识别高级语言的呢?
在这里插入图片描述

虚拟机是什么

答案是虚拟机,虚拟机可以理解为虚拟计算机,虚拟计算机通过解释器将其认识的指令解释为计算机认识的指令。JVM中只通过解释器来解释运行效率太慢,所以对于热点代码即反复执行的代码通过JIT即时编译器将其编译为本地代码。这个编译器叫做后端编译器。

JVM流行的一点原因是其跨平台性:一次编译,多端运行

怎么实现的大家也大概猜到了,JVM虚拟机识别操作系统将class字节码转换为不同操作系统可以识别的指令。
在这里插入图片描述

java代码如何转换成机器识别的代码

我们写代码的时候通过编写JAVA文件,通过javac命令编译成class文件,用java命令运行class文件。

拆分:
一,也就是javac命令将java代码编译成为java字节码也就是class文件,这个编译器叫做前端编译器。编译后的class文件由0和1构成,这其实是java字节码的结构。

二,通过类加载器ClassLoader的加载,链接,初始化后将其转换为JVM内存中的数据。我们要想看到class字节码结构是什么样的,可以通过反编译class文件,讲解JAVA字节码文件将在后面博客中详细介绍。

三,执行引擎将高级语言翻译为机器语言即计算机能够识别的语言。

总结:前端编译器将Java文件转换为字节码class文件,通过类加载器ClassLoader的加载,链接,初始化这三步加载到内存中,JVM识别字节码文件将数据放到对应的内存结构中,但是机器不认识这些字节码文件,所以执行引擎又进行了编译转化为计算机能够识别的指令【后端编译器】,其充当了转换字节码的任务(通过解释器解释运行,但是由于效率低,所以对于热点代码通过JIT即时编译器编译成本地代码)

最后来张图:
图中运行时数据区为JVM内存结构中的,下一篇博客进行讲解~。
在这里插入图片描述

在这里插入图片描述

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值