读取Java字节码指令:该数字是什么意思?

读取Java字节码指令:该数字是什么意思?,第1张

读取Java字节码指令:该数字是什么意思?

Java类文件和字节码

Java类文件(字节码文件)由不同的组件组成:

http://en.wikipedia.org/wiki/Java_class_file

  • 幻数:0xCAFEBABE
  • 类文件格式的版本:类文件的次要和主要版本
  • 常量池:类的常量池
  • (…)
  • 栏位:课程中的所有栏位
  • 方法:类中的任何方法
  • 属性:类的任何属性(例如,源文件的名称等)

数字#5只是指常量池中的某个位置。在该位置找到一个CONSTANT_FieldRef,其中包含对CONSTANT_NameAndType的引用以及其他属性。并且CONSTANT_NameAndType包含对CONSTANT_Utf8的引用(包含实际的字符串/名称。)

因此流程如下所示:

getfield #number -> FieldRef -> NameAndType -> Utf8 -> string

http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html

因此,无需在每个

getfield
指令中保存整个字符串,而是可以保存数字。这样可以提高解释器(或JIT)的性能以及类文件中的空间。

手写字节码

可以使用此工具将手写的字节码汇编到类文件中(包含许多示例):

http://jasmin.sourceforge.net/



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5462119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存