JVM虚拟机-Class文件之类索引、父类索引和接口索引集合

简介: JVM虚拟机-Class文件之类索引、父类索引和接口索引集合

 image.gif编辑

 

一、概述

前面介绍了class文件,包括魔数、次版本号、主版本号、常量池和访问标志.接下来的就是用于确定这个类的继承关系的类索引(this_class)、父类索引(super_class)与接口索引集合(interfaces)这三项。

 类索引、父类索引和接口索引集合都按顺序排列在访问标志之后,类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。由于Java语言不允许多继承,因此父类索引只有一个,除了java.lang.Object之外,所有的Java类都有父类,因此除了Object外,所有Java类的父类索引都不为0。

二、详细描述

类索引和父类索引均是u2类型的数据,它们各自指向一个类型为CONSTANT_Class_info类型的常量,通过CONSTANT_Class_info类型的常量中的索引值可以找到定义在CONSTATN_Utf8_info类型的常量中的全限定名字符串。

接口索引集合用来描述这个类实现了哪些接口,它是一组u2类型的数据的集合,集合中的第一项是接口计数器,表示索引表的容量。如果一个类没有实现任何接口,则该计数器值为0。

索引位置参见下图:

image.gif编辑

三、案例分析

新建接口:

public interface HelloWord {
}

image.gif

image.gif编辑

这里类索引值是0x0001,也就是指向常量池中的第一项,通过查找常量池可知这个类的全限定名是com/csdn/reader/HelloWord。

image.gif编辑

类索引后的两个字节就是父类索引,同上可查找到父类索引为0x0002,对应于常量池中的第二项:

image.gif编辑

image.gif编辑

由于类实现的接口数目不确定,所以接口索引集合的描述的前部分叫做接口计数器(interfaces_count),接口计数器占用两个字节,其中的值表示着这个类实现了多少个接口,紧跟着接口计数器的部分就是接口索引部分了,每一个接口索引占有两个字节,接口计数器的值代表着后面跟着的接口索引的个数。

com.csdn.reader.HelloWord类没有实现任何接口,接口索引值为0。

image.gif编辑

来个复杂一点的:

public interface HelloWord extends StringBuilderFormattable, Serializable {
}

image.gif

image.gif编辑

通过javap来进行分析:

image.gif编辑

参考资料:

    1. JVM-class文件完全解析-类索引,父类索引和索引集合 - 小凉 - 博客园
    2. Class文件详解_IT_GJW的博客-CSDN博客_class文件是什么
    3. Class类文件的结构(一)常量池、访问标志和索引_WindSearcher的博客-CSDN博客
    相关文章
    |
    1月前
    |
    数据库 虚拟化 Windows
    虚拟机数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
    虚拟机数据恢复环境: 某品牌服务器通过同品牌某型号的RAID卡,将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台,虚拟机安装Windows Server系统,每台虚拟机有两个虚拟机磁盘(系统盘 + 数据盘),虚拟机作为Web服务器使用。 虚拟机故障&分析: 机房异常断电导致服务器中一台VPS(XenServer虚拟机)不可用,虚拟磁盘文件丢失。
    |
    1月前
    |
    Java
    jvm复习,深入理解java虚拟机一:运行时数据区域
    这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
    64 19
    jvm复习,深入理解java虚拟机一:运行时数据区域
    |
    30天前
    |
    存储 算法 Java
    Java虚拟机(JVM)的内存管理与性能优化
    本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
    |
    30天前
    |
    Arthas 监控 数据可视化
    JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
    本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
    |
    1月前
    |
    存储 运维 虚拟化
    虚拟化数据恢复——Hyper-V虚拟化故障导致虚拟机文件丢失的数据恢复案例
    在Windows Server上部署的Hyper-V虚拟化环境中,因存储中虚拟机数据文件丢失导致服务瘫痪。北亚企安数据恢复工程师通过物理检测、操作系统及文件系统检测,确定为人为格式化造成,并通过镜像硬盘、重组RAID、分析并恢复文件索引项等步骤,成功恢复数据,最终在新Hyper-V环境中验证并迁移所有虚拟机,确保用户业务恢复正常运行。
    |
    1月前
    |
    SQL 缓存 Java
    JVM知识体系学习三:class文件初始化过程、硬件层数据一致性(硬件层)、缓存行、指令乱序执行问题、如何保证不乱序(volatile等)
    这篇文章详细介绍了JVM中类文件的初始化过程、硬件层面的数据一致性问题、缓存行和伪共享、指令乱序执行问题,以及如何通过`volatile`关键字和`synchronized`关键字来保证数据的有序性和可见性。
    30 3
    |
    1月前
    |
    缓存 前端开发 Java
    JVM知识体系学习二:ClassLoader 类加载器、类加载器层次、类过载过程之双亲委派机制、类加载范围、自定义类加载器、编译器、懒加载模式、打破双亲委派机制
    这篇文章详细介绍了JVM中ClassLoader的工作原理,包括类加载器的层次结构、双亲委派机制、类加载过程、自定义类加载器的实现,以及如何打破双亲委派机制来实现热部署等功能。
    48 3
    |
    1月前
    |
    存储 算法 Java
    深入理解Java虚拟机(JVM)及其优化策略
    【10月更文挑战第10天】深入理解Java虚拟机(JVM)及其优化策略
    43 1
    |
    1月前
    |
    小程序 Oracle Java
    JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
    这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
    45 0
    JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
    |
    1月前
    |
    Linux 测试技术 虚拟化
    解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)
    解决虚拟机文件因快照占用硬盘空间较多的情况(压缩虚拟机文件,节省硬盘空间)
    151 1