JAVA语言是怎么执行的?JVM和JAVA有什么关系?

Java从编码到执行

在这里插入图片描述
我们普通的java源文件需要经过javac命令编译后变成class文件,这个过程是在硬盘执行的,然后通过java命令将class文件加载进内存(这个时候java类库也会加载进内存),经过字节码解释器或者JIT即时编译器之后会到执行引擎这,最后会到我们的OS硬件上,这个是java文件的一个大概执行流程。
那么在这里要解释一下字节码解释器和JIT即时编译器,有很多人问java是解释执行的还是编译执行的,其实解释还是编译是可以混合的,常用的代码用道德次数多会用即时编译器,下次再执行就不需要再一句一句解释来执行了,执行引擎可以直接交给操作系统,这个效率会高很多,但并不是所有的代码都会交给JIT即时编译的这样的话整个java就变不成跨平台了,所以有一些特定的或者经常使用的代码可以定义即时编译器。

在这里插入图片描述
我们平常测试jdk版本的时候后面这个mixed mode就是这两种的混合。

从跨平台的语言到跨语言的平台

在这里插入图片描述
有很多语言都可以在JVM虚拟机上运行,那么这些语言是跨平台的语言,换个思路来说,JVM就是跨语言的平台,那么这些可以在JVM虚拟机上运行的语言有什么样的特点呢?

JVM与class文件格式

其实,jvm与java无关,任何语言只要能变成class就可以在JVM上运行。不一定是编译成class文件,有的实在执行的过程之中形成二进制class流文件扔给jvm也可以运行。
jvm虚拟机是一种规范,是虚构出来的一台计算机,它包括字节码指令集(汇编语言)和 内存管理:堆栈方法区等。(查看Oracle网站https://docs.oracle.com/javase/specs/jvms/se16/jvms16.pdf)

常见的JVM实现

那么JVM既然是一种规范,就一定有实现,常见的JVM实现有以下几种:
Hotspot
-oracle官方,我们做实验用的JVM
-java -version
Jrockit
-BEA,曾经号称世界上最快的JVM
-被Oracle收购,合并于hotspot
J9-IBM
Microsoft VM
Taobao VM
-hotspot深度制定版
LiquidVM
-直接针对硬件
azul zing(商业版的)
-最新垃圾回收的业界标杆
-www.azul.com

JDK JRE JVM

那么来简单总结一下JVM和JDK以及JRE的区别与联系吧
JDK=jre+development kit
JRE=jvm+core lib
JVM

Class类文件结构

如果感兴趣的小伙伴想要深入了解class文件怎么执行代表什么意思,就去研究以下Class类文件结构吧,一定会有收获的,我在这里就简单的提一下。

● Class文件是一组以8字节为基础单位的二进制流,
● 各个数据项目严格按照顺序紧凑排列在class文件中,
● 中间没有任何分隔符,这使得class文件中存储的内容几乎是全部程序运行的程序。
Java虚拟机规范规定,Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表。
无符号数
属于基本数据类型,主要可以用来描述数字、索引符号、数量值或者按照UTF-8编码构成的字符串值,大小使用u1、u2、u4、u8分别表示1字节、2字节、4字节和8字节。

是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有的表都习惯以“_info”结尾。表主要用于描述有层次关系的复合结构的数据,比如方法、字段。需要注意的是class文件是没有分隔符的,所以每个的二进制数据类型都是严格定义的。具体的顺序定义如下:
在这里插入图片描述

在class文件中,主要分为魔数、Class文件的版本号、常量池、访问标志、类索引(还包括父类索引和接口索引集合)、字段表集合、方法表集合、属性表集合。

这是我对JVM虚拟机近期的见解,欢迎小伙伴们来交流沟通~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值