当前位置:网站首页>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未完
上面其实只是入门,还有很多值得深入的,比如常量池中的都是哪些,表示都是什么意思,方法区是什么样子的,有兴趣的话可以查找资料了解,当然,面试应该问不到这种程度吧.
注意:本文仅代表菜鸟博主的个人观点,如果哪里不对或者路过技术大大有更好的想法,欢迎留言告知,分享和交流使我们进步,谢谢。
边栏推荐
- xml 文件的读写
- Summary of SQL basic syntax for C #
- WARN:  SQL  Error: …
- Arm development studio build compilation error
- Lost connection repair: make "hide and seek" nowhere to hide
- crond BAD FILE MODE /etc/cron.d
- 自用工具 猴子都会用的unity视频播放器
- Why is the service implementation class always red
- "Five layer" architecture of cloud applications and services
- INFO: HHH000397: Using…
猜你喜欢

matlab习题 —— 符号运算相关练习

Tardigrade: Trino's solution to ETL scenarios

"Five layer" architecture of cloud applications and services

可扩展系统的“9不”原则和“5个”衡量维度

Question bank and answers of special operation certificate for R1 quick opening pressure vessel operation in 2022

用于 C# 的 SQL 基本语法总结

基于 WPF 的酷炫 GUI 窗口的简易实现

Dataloader参数collate_fn的使用

Solution to not displaying logcat logs during debugging of glory V8 real machine

调试利器 go-spew
随机推荐
Brief history and future trend of codeless software
xml 文件的读写
Idea auto generate code
MySQL configuration of database Series F5 load balancing
十年职场软件工程师感悟
Tencent games released more than 40 products and projects, including 12 new games
Introduction to kubernetes resource object and common commands
Relative path writing of files
How to automatically add author, time, etc. to eclipse
自用工具 猴子都会用的unity视频播放器
2022 electrician (elementary) recurrent training question bank and online simulation examination
嵌入式软件开发中必备软件工具
Scalable storage system (I)
A pit filling trip based on LNMP to build a personal website
Lost connection repair: make "hide and seek" nowhere to hide
Go 數據類型篇(四)之浮點型與複數類型
"9 No" principle and "5 measurement dimensions" of extensible system
Li Kou daily question - day 29 -1491 Average wage after removing minimum wage and maximum wage
第二轮红队免费公开课来袭~明晚八点!
Extensible database (Part 2)