当前位置:网站首页>JVM一:JVM入门以及Class文件认识
JVM一:JVM入门以及Class文件认识
2022-06-28 02:48:00 【smartjiang-java】
文章目录
从此篇博客开始,专注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未完
上面其实只是入门,还有很多值得深入的,比如常量池中的都是哪些,表示都是什么意思,方法区是什么样子的,有兴趣的话可以查找资料了解,当然,面试应该问不到这种程度吧.
注意:本文仅代表菜鸟博主的个人观点,如果哪里不对或者路过技术大大有更好的想法,欢迎留言告知,分享和交流使我们进步,谢谢。
边栏推荐
- Circular sliding auto adsorption UI tool that monkeys can use
- 力扣每日一题-第29天-219.存在重复元素Ⅱ
- How does the open-ended Hall current sensor help the transformation of DC power distribution?
- STM32外设SDIO和SD卡的配置
- nn. Parameter and torch nn. Init series of functions to initialize model parameters
- collections.defaultdict()的使用
- MySQL 数据库的自动备份操作
- Li Kou daily question - day 29 -219 Duplicate Element II exists
- 2022 operation of simulated examination platform of special operation certificate examination question bank for safety management personnel of hazardous chemical business units
- Summary of the use of composition API in the project
猜你喜欢

GAMES104 作业2-ColorGrading

R1 Quick Open Pressure Vessel Operation Special Operation Certificate Examination Library and Answers in 2022

17 `bs对象.节点名h3.parent` parents 获取父节点 祖先节点

service实现类里面为何一直报红

大咖说·计算讲谈社|什么是东数西算要解决的核心问题?

2022年R1快開門式壓力容器操作特種作業證考試題庫及答案

composition api在项目中的使用总结

可扩展数据库(上)

导入Excel文件,解决跳过空白单元格不读取,并且下标前移的问题,以及RETURN_BLANK_AS_NULL报红

【PaddleDetection】ModuleNotFoundError: No module named ‘paddle‘
随机推荐
R1 Quick Open Pressure Vessel Operation Special Operation Certificate Examination Library and Answers in 2022
Inference optimization implementation of tensorrt model
华为设备WLAN基本业务配置命令
数的每一位平方和
MySQL configuration of database Series F5 load balancing
matlab习题 —— 符号运算相关练习
idea自动生成代码
2022危险化学品经营单位安全管理人员特种作业证考试题库模拟考试平台操作
Importer un fichier Excel, résoudre le problème de sauter les cellules vides et de ne pas lire, et avancer l'indice, et retourner Blank As NULL Red
What is the difference between slice and array in go question bank 12?
The same is MB. Why is the gap so large?
Learning - useful resources
WebSocket(简单体验版)
Anaconda命令用法
电子地图坐标系统研究整理
Circular sliding auto adsorption UI tool that monkeys can use
在牛客中使用JS编程题【split】
自用工具 猴子都会用的unity视频播放器
xml 文件的读写
Huawei equipment WLAN basic service configuration command