美文网首页
一.了解Class字节码文件

一.了解Class字节码文件

作者: 超能小蚂蚁 | 来源:发表于2019-03-10 13:27 被阅读0次

    class文件:编译后被JVM所执行的,不依赖特定硬件即操作系统的,二进制格式文件。

    每个class文件对应与如下所示的ClassFile结构

1.General Information

    在Class文件中是没有General Information这个信息的 它是一系列有关于这个类结构的总述

    它包含了我们所熟知的 魔术,版本号,常量池数量,访问控制符,本类索引,父类索引,接口数量,字段数量,方法数量等。

2.Constant Pool 

常量池是ClassFile中非常重要和核心的内容,ClassFile描述了一个Java类中绝大多数的信息。

常量池的基本结构

Constant Pool 主要由常量池数量和常量池数组两部分组成

JVM规定不使用第0个元素

tag1元素内容tag2元素内容tag3元素内容...tagn元素内容

JVM定义的11种常量

CONSTANT_Utf8_info

对应除CONSTANT_Utf8_info 之外的其他类型 JVM获取到tag标识便可以从JVM中的常量表中获取到起对应内容的长度

但CONSTANT_Utf8_info内容长度是不固定的,于是class文件在CONSTANT_Utf8_info元素内容之前划分除2个字节用于描述 UTF-8字符串编码的长度(tag+length+bytes),详情请参考上图数据类型结构表

3.Fields

fields_count和field_info_fields[fields_count]

fielsd_count 记录了当前类定义的变量总数(类变量+静态变量),结构为u2

fields 记录了每个变量的 变量名, 变量类型, 访问标识, 属性等

Descriptor: <Ljava/lang/String;>

JVM规范中每个变量都有描述信息(字段的数据类型,方法参数列表,返回值)

Method

 method_info {u2 access_flags; u2 name_index; u2 descriptor_index; u2 attributes_count; attributes}                                    

method中的三种方法

<init> 类的构造函数,一个类可以有多个<init>,当JVM决定实例化某个类时调用

<clinit>类初始化方法,Java编译器在编译期间动态添加类初始化方法(static变量,static{}),一个类只有一个,JVM决定加载某个类时调用<clinit>方法

普通方法:

虚拟机规范的9项属性

9大属性

非静态方法 LocalNumberTable 默认第一个参数为 this

本小节只重点分享了 Java ClassFile中作者认为的重点,Java class字节码文件中还有很多属性,具体请参考《Java 虚拟机规范(Java SE 8版)》

相关文章

  • 一.了解Class字节码文件

    class文件:编译后被JVM所执行的,不依赖特定硬件即操作系统的,二进制格式文件。 每个class文件对...

  • 新鲜出炉,深入讲解java反射的底层原理,这篇算讲的不错了!

    反射 反射 Java代码和Java文件 Java文件和.class字节码文件 class字节码文件在内存中的位置 ...

  • 03 java字节码文件

    java源码经过编译,生成class字节码文件,JVM加载class文件执行。字节码文件将java语言与JVM解耦...

  • 2020-12-19 JVM-编译和类加载机制

    引言:今天谈谈源码文件如何编译Class字节码文件以及字节码文件如何加载到JVM中。 源码转换为字节码文件 1.源...

  • JVM

    JVM 基础-类字节码详解 多语言编译为字节码在 JVM 运行 Java 字节码文件-- Class文件的结构属性...

  • ClassLoder学习笔记

    ClassLoder 负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容...

  • java 字节码

    字节码: 1: 字节码结构,class文件的二进制文件意义2: 现有的字节码技术,asm与javasist3: d...

  • idea字节码插件JClassLib深入解读JVM字节码

    生成字节码文件并查看 查看字节码文件的方式:javac 文件名.java 即可生成.class文件,但是这种方式不...

  • 11_JVM学习笔记_字节码剖析

    字节码剖析 示例代码: 反编译信息如下: 字节码文件16进制 Java字节码结构 Class字节码中有两种数据类型...

  • Effect JAVA -机制与原理

    JAVA字节码.Class解析 不论该字节码文件来自何方,由哪种编译器编译,甚至是手写字节码文件,只要符合java...

网友评论

      本文标题:一.了解Class字节码文件

      本文链接:https://www.haomeiwen.com/subject/atllpqtx.html