我在阅读java字节码时看到了这个:
getfield #5 (Field java.lang.String name)
什么是#5
mean?
如何用字节码编写程序?
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/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)