JVM虚拟机-Class文件之属性表集合

简介: JVM虚拟机-Class文件之属性表集合

 一、概述

在class文件中,属性表集合包括Java虚拟机预先规范定义的属性以及用户自定义的属性,对于用户自定义的属性,虚拟机加载的时候会自动忽略掉。class文件、字段表、方法表都可以携带自己的属性表集合,便于描述某些场景专有的信息。

二、组成

image.gif编辑

虚拟机中预定义的属性有:

属性名称 使用位置 含义
Code 方法表 Java代码编译成的字节码指令
ConstantValue 字段表 final关键字定义的常量池
Deprecated 类,方法,字段表 被声明为deprecated的方法和字段
 Exceptions 方法表  方法抛出的异常 
 EnclosingMethod 类文件  仅当一个类为局部类或者匿名类是才能拥有这个属性,这个属性用于标识这个类所在的外围方法 
 InnerClass 类文件  内部类列表 
 LineNumberTable Code属性  Java源码的行号与字节码指令的对应关系 
 LocalVariableTable Code属性  方法的局部便狼描述 
 StackMapTable Code属性  JDK1.6中新增的属性,供新的类型检查检验器检查和处理目标方法的局部变量和操作数有所需要的类是否匹配 
 Signature 类,方法表,字段表   用于支持泛型情况下的方法签名
 SourceFile 类文件  记录源文件名称 
 SourceDebugExtension 类文件  用于存储额外的调试信息 
 Synthetic 类,方法表,字段表  标志方法或字段为编译器自动生成的 
 LocalVariableTypeTable 类  使用特征签名代替描述符,是为了引入泛型语法之后能描述泛型参数化类型而添加 
 RuntimeVisibleAnnotations 类,方法表,字段表  为动态注解提供支持 
 RuntimeInvisibleAnnotations 表,方法表,字段表  用于指明哪些注解是运行时不可见的 
 RuntimeVisibleParameterAnnotation 方法表  作用与RuntimeVisibleAnnotations属性类似,只不过作用对象为方法
 RuntimeInvisibleParameterAnnotation   方法表  作用与RuntimeInvisibleAnnotations属性类似,作用对象哪个为方法参数
 AnnotationDefault  方法表 用于记录注解类元素的默认值 
 BootstrapMethods 类文件  用于保存invokeddynamic指令引用的引导方式限定符  

属性表的结构attribute_info

attribute_info{
    attribute_name_index//属性的名称索引(指向常量池)2个字节
    attribute_length//属性长度 4个字节
    info//有attribute_length个字节属性值
}

image.gif

三、常见属性介绍

Code属性

Exceptions属性

LineNumberTable属性

LocalVariableTable属性

SourceFile属性

ConstantValue属性

InnerClass属性

属性表这部分内容比较多,也比较复杂,暂时先记录到这里。

参考资料:

    1. JVM-class文件完全解析-属性表集合 - 小凉 - 博客园
    2. class类文件结构——属性表集合_Joy CR的博客-CSDN博客
    3. Class文件结构介绍[属性表集合]_波波烤鸭的博客-CSDN博客_class文件结构之属性表
    相关文章
    |
    1月前
    |
    数据库 虚拟化 Windows
    虚拟机数据恢复—XenServer虚拟机磁盘文件丢失的数据恢复案例
    虚拟机数据恢复环境: 某品牌服务器通过同品牌某型号的RAID卡,将4块STAT硬盘为一组RAID10阵列。上层部署XenServer虚拟化平台,虚拟机安装Windows Server系统,每台虚拟机有两个虚拟机磁盘(系统盘 + 数据盘),虚拟机作为Web服务器使用。 虚拟机故障&分析: 机房异常断电导致服务器中一台VPS(XenServer虚拟机)不可用,虚拟磁盘文件丢失。
    |
    30天前
    |
    存储 算法 Java
    Java虚拟机(JVM)的内存管理与性能优化
    本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
    |
    1月前
    |
    存储 运维 虚拟化
    虚拟化数据恢复——Hyper-V虚拟化故障导致虚拟机文件丢失的数据恢复案例
    在Windows Server上部署的Hyper-V虚拟化环境中,因存储中虚拟机数据文件丢失导致服务瘫痪。北亚企安数据恢复工程师通过物理检测、操作系统及文件系统检测,确定为人为格式化造成,并通过镜像硬盘、重组RAID、分析并恢复文件索引项等步骤,成功恢复数据,最终在新Hyper-V环境中验证并迁移所有虚拟机,确保用户业务恢复正常运行。
    |
    1月前
    |
    SQL 缓存 Java
    JVM知识体系学习三:class文件初始化过程、硬件层数据一致性(硬件层)、缓存行、指令乱序执行问题、如何保证不乱序(volatile等)
    这篇文章详细介绍了JVM中类文件的初始化过程、硬件层面的数据一致性问题、缓存行和伪共享、指令乱序执行问题,以及如何通过`volatile`关键字和`synchronized`关键字来保证数据的有序性和可见性。
    30 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月前
    |
    存储 安全 Java
    jvm 锁的 膨胀过程?锁内存怎么变化的
    【10月更文挑战第3天】在Java虚拟机(JVM)中,`synchronized`关键字用于实现同步,确保多个线程在访问共享资源时的一致性和线程安全。JVM对`synchronized`进行了优化,以适应不同的竞争场景,这种优化主要体现在锁的膨胀过程,即从偏向锁到轻量级锁,再到重量级锁的转变。下面我们将详细介绍这一过程以及锁在内存中的变化。
    37 4
    |
    14天前
    |
    Arthas 监控 Java
    JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
    本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
    |
    11天前
    |
    Java Linux Windows
    JVM内存
    首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制。
    11 1
    |
    1月前
    |
    缓存 算法 Java
    JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
    这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
    68 4
    JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS