首页 > 编程语言 > 详细

【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

时间:2018-11-08 20:07:31      阅读:168      评论:0      收藏:0      [点我收藏+]

  我为什么喜欢Java,另重要原因就是跨平台,就是WORA。

  程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机

?Tip

  Java生态中的语言有很多,处理Java本身还有Scala、Groovy和Jruby。然而虚拟机只管跟底层操作系统打交道,对上层它只认字节码。那么跟各种语言打交道的

就是翻译家—编译器。字节码的载体就是.class文件。

  字节码,是以8个字节为单位的二进制文件,整个文件中排列紧凑,从头到尾不含一个分隔符。那么字节码的构成是什么样的呢?

一、字节码文件的构成

1、魔数与版本

  每个.class文件都是以CAFEBABE四个字节开始,它的作用就是标识这个文件是.class文件。

  第五到第八这四个字节是.class文件的版本号。Java的策略是向下兼容,就是高版本的虚拟机可以跑低版本的字节码,反过来不行。

2、常量池(Constant Pool)

  包含字面量(literal)和符号引用(Symbolic References)。常量数是不固定的,所以常量池区域在字节码文件中以常量计数器开始。

    ①字面量可以认为是Java中的常量,包括字符串、final常量。

    ②符号引用包括,类和接口的全限定名、字段的名称和描述符、方法的名称和描述符。

  需要指出的是,常量的表示很复杂,每种常量都用自己独特的数据结构来表达。  

?字节码分析工具javap

  查看x.class文件中的常量池可以用命令:

    javap -verbose x。 

3、访问标识(access_flag)

  访问标识长度为两个字节(16位),其中8位已被定义。它主要用来表示类或接口的属性等信息(如public、abstract、final等)。

4、类索引(this_class)、父类索引(super_class)及接口索引(interfaces)集合

  用来确定类的继承和实现关系。

5、字段表集合(field_info)

  描述类或接口中定义的字段。

6、方法表集合

7、属性表集合(attribute_info)

  每个类、字段、方法需要用自己特有的数据结构来表示,这种数据结构就是属性表。

  另外,字节码指令跟汇编指令一样,也由操作码(opcode)和操作数(operands)构成。

  

【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

原文:https://www.cnblogs.com/tigerhsu/p/9930461.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!