JVM入门之认识程序运行本质

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内存结构中的,下一篇博客进行讲解~。
在这里插入图片描述

ESD静电屏蔽防护的方法及原理分析
基于Atmega128单片机无人车控制系统电路设计
温度传感器—半导体热敏电阻
小米真无线耳机2S曝光,有望实现进行反向无线充电
步小米、OPPO后尘!又一企业收缩芯片战线 今年应届生或被全部优化
JVM入门之认识程序运行本质
LG Display大尺寸OLED出货量预计660万片
星环科技TDH社区版可实现上百亿条数据管理分析
基于BMR200工业无线路由器与5G网络实现叉车电池远程在线监测
杭电机械工程学院研究出一款高度智能快递派送机器人
电力无人机巡线
谷歌开发了一种眼睛扫描技术
国内首台操大功率漂浮式风力发电机已下线
移动式便携式多参数水质在线检测仪自带电池支持GPS单位
搭载AI专用芯片 索尼α7系列R5微单正式发布
PLC短信报警、远程监控 巨控GRM530深度详解
工程师如何转型成为管理者?
大联大品佳集团力推NXP Smart Audio PA在手机端应用
半导体行业将迎IPO热潮 中微半导体正为IPO作准备
诺基亚携手菲律宾发展5G技术,并将应用于VR/AR领域