JVM系列【2】Class文件结构

2022年01月16日 阅读数:2
这篇文章主要向大家介绍JVM系列【2】Class文件结构,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

JVM系列笔记目录

  • 虚拟机的基础概念
  • class文件结构
  • class文件加载过程
  • jvm内存模型
  • JVM经常使用指令
  • GC与调优

如何查看class字节码文件

在idea中能够经过插件BinEd来查看二进制或十六进制文件。展现一个简单类的class文件源字节码,看不懂?请往下看。html

file

更直观一点的能够在idea中安装插件jclasslib,选中类文件->View-> Show Bytecode With jclasslib。该插件清楚地看到.class文件的各个组成部分。java

file

另一种方式,经过javap查看。数组

file

Class文件结构

文件结构由16个部分组成,约定下u4指占用的字节数为4,u2同理。这里指简单说明各个部分的含义,不作详细展开,如想深刻了解,参考 JVM规范第4章节The class File Formatoracle

  • Magic Number class文件标志符 u4,ca fe ba be
  • Minor Version class文件小版本号 u2
  • Major Version 主版本号 u2,主版本+小版本号构成jdk版本,jdk8 默认 52.0,jdk7默认为51.0
  • constant_pool_count 常量池的大小u2
  • constant_pool 长度为constant_pool_count-1的数组,class文件中最复杂的部分
  • access_flag 类修饰符
  • this_class 类全名,指向常量池某个元素
  • super_class 父类名 指向常量池的某个元素
  • interface_count 实现的接口数量
  • interfaces 接口
  • fields_count 字段数量
  • fields 字段
  • method_count 方法数量
  • methods 方法
  • attribute_count 附加属性数量
  • attributes 附加属性

总结

class 文件结构很复杂,本为只是做简单介绍,为 JVM系列【3】Class文件加载过程JVM系列【4】内存模型做为基础知识点的铺垫。真正想深刻理解class文件结构的,请阅读官方JVM规范。jvm

知识分享,转载请注明出处。学无前后,达者为先!ide