JVM一:JVM入门以及Class文件认识

从此篇博客开始,专注JVM相关内容,从浅到深.

1.JVM入门

1.1 什么是JVM

在这里插入图片描述
其实:JVM是一种规范,人们常说Java是跨平台的语言,而JVM帮助屏蔽了不同操作系统的底层,是跨语言的平台.它不仅仅应用于Java语言,它是可以认识所有能编译成.class格式的文件(字节码文件).

1.2 JVM和JDK,JRE的关系(面试有可能问)

在这里插入图片描述

1.3 JVM的常见实现

在这里插入图片描述
其中,我们目前安装JDk使用的是HotSpot,这个是oracle官方那个是用的,有很多实力公司不依赖oracle公司的这个,他们会根据JVM规范自己实现一些虚拟机,比如淘宝的是TaobaoVM(免费,Java虚拟机收费大家可以可以使用这个),还有商业版本收费,垃圾回收最快的azul zing(有钱公司使用).所以说:一流的公司制造规范,二流的公司实现规范,三流的公司使用规范.

1.4 如何查看当前机器安装的JVM?

打开 dos系统,输入java -version即可查看.
在这里插入图片描述
上面可以看出:
使用的是HotSpot,1.8版本,执行模式是mixed mode,解释执行和编译执行混合执行

2.class文件认识(有兴趣了解)

大家知道,JVM只认识.class文件,但是.class文件是什么样子的,大家认识吗?

2.1 class文件查看

其实:
1:class文件是一个进制字节流.
2:这个文件的数据类型有u1 u2 u4 u8和_info(表类型) uX:表示X字节的无符号整数 _info的来源是hotspot源码中的写法
3:当然我们一般打开16进制的,可以使用 sublime / notepad或者 IDEA插件 -BinEd查看(一般使用这个)
安装好插件后,File–>Open As Binary, 选择编译好的.class文件即可 在这里插入图片描述
上面的16进制码一开始看有点迷糊,但是单独提出来:
在这里插入图片描述
解释:
1:Magic Number:CA FE BA BE指的是文件统一的标识符,是Class文件,不是png文件等等
2:Minor Version:00 00,小版本号 ,这里表示00
3:Major Version:00 34,大版本号,0034换成十进制就是52,对应jdk版本1.8
4:constant_pool_count: 00 10,表示常量池中的常量数,最大为164-1,常量池编号从1开始
5:constant_pool表示长度为constant_pool_count-1的表
6:access_flags:修饰符(piblic/…),interface…
7:this_class:当前类指到常量池的位置
8:super_class:父类指到常量池的位置
9:interface_count:接口数量
10:interfaces:具体接口实现
11:fields_count:属性属性
12:fields:具体属性
13:methods_count:方法数量
14:methods: 集体方法
15:attributes_count -u2:附加属性数量
16:attributes:具体附加属性
但是上面是如何让实现的,大家可以借助IDEA的jClasslib插件,手动编译class文件,光标放入class文件大括号内,view - show byteCode with jclasslib
在这里插入图片描述

2.2class文件结构总结

classFile构成:
classFile{
u4 magic;
u2 minor_version;
u2 major_version;
U2 constant_pool_count;
Cp_info constant_pool[constant_pool_count-1]
U2…
}

2.3未完

上面其实只是入门,还有很多值得深入的,比如常量池中的都是哪些,表示都是什么意思,方法区是什么样子的,有兴趣的话可以查找资料了解,当然,面试应该问不到这种程度吧.

注意:本文仅代表菜鸟博主的个人观点,如果哪里不对或者路过技术大大有更好的想法,欢迎留言告知,分享和交流使我们进步,谢谢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值