JVM<一> 初识JVM CLASS文件结构

本文介绍了JVM的基础知识,包括其作为Java程序运行环境的角色,以及与class文件的关系。重点讨论了class文件结构,如魔数、常量池等,并通过Idea的jclasslb插件展示了class文件的内容。同时,文章探讨了接口与Object类的关系,指出接口的父类并非Object。提供了官方文档链接和学习资源,帮助初学者理解JVM和class文件格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期,由于某种原因-小白的我开始接触学习JVM相关知识。特此,将近期学习的知识记录一下,以供后期复习使用。若有不正之处,还请各路大神批评指正。

一、JVM概述 Java Virtual Machine

java虚拟机,一种程序软件,是java程序运行的环境,跨平台的实现基石;

jvm与class文件有必然联系,和java语言没有关系;

java产品:HotSpot(Oracle jdk 与 OpenJdk(默认))

JVM规范:官方文档 https://docs.oracle.com/javase/specs/index.html

orcal 官网文档:https://docs.oracle.com/en/java/javase/index.html

openJdk 官网文档:https://openjdk.java.net

学习网站:

https://dzone.com--各大技术网站不仅限于java

https://www.javaworld.com--专注于java学习的网站

二、class 文件结构 (这里指 jdk1.8)

官方文档是这样规定的:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

如果官方文档英文看不懂,这里可以使用 google 自带的翻译插件进行翻译查看; 

那么 ,idea 有个插件  jclasslb bytecode 可以查看编译后的class 文件结构,很明确的介绍了类的结构信息;

    Class 文件格式:一个class文件由一个 8 位字节的流组成。所有 16 位、32 位和 64 位数量都是通过分别读取两个、四个和八个连续 8 位字节来构造的。多字节数据项始终以大端顺序存储(ps:原因是因为这符合人类的读取习惯),其中高字节在前。

存储有两种形式:

1)高端模式-高位低存:如字节位置有 4X001、4X002、4X003、4X004,若想存储一个数值1234,那么实际上的存储形式是:数字1(高位值-千位)存储于高位4X001、数字2(百位)存储于4X002、数字3(十位)存储于4X003、数字4(个位)存储于4X004。

2)低端模式-低位高存:与高端模式刚好相反。

这里贴一张 class 文件结构学习时的思维结构图:

1.class 一般信息 

 magic 魔数 jvm 用来判定是否是 class 文件格式的判定标准:固定值 :CAFEBABE

java 文件  经 javac 编译成 class 文件; javap -v + class文件名 可以查看字节码文件;

2.常量池 cp_info constant_pool[constant_pool_count-1]

 常量池符号表类型:

 

 

 

 问题1:接口的父类是不是 Object ?可以通过Idea 的jclassLb插件 反向论证:
首先,创建两个class 类 ca,cb ,然后ca extends cb ,build之后查看 jclasslb->content pool classInfo 信息,只有两个类:ca,和 cb ,并没有出现Object ,也以此论证了存储于class_Info常量池中的信息,只储存类本身自己和直接父类;
然后,同理,按照上述说明,再创建两个interface 接口:Ia ,Ib ,然后将Ia extends Ib ,再次查看,共有三种信息:
Ia,Ib,Object ,按照第一步的说明,此时这里不应该出现Object ,但是接口中仍旧出现,则以此反证:接口的基类不是Object; 

 以上内容是初始JVM 涉及到的 class 文件结构体内容,以及经过编译后的class 文件结构存储形式,这里可以使用 idea 插件 jclasslb bytecode 进行查看;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值