java字节码常量池_java字节码常量池处理说明
1. 根據java的字節碼格式說明,常量池中每一項的大小不一樣的。運行時,若要通過數組索引獲取具體的一項時,
必須要經過一定的處理才能根據數組下標進行處理,具體的實現原理實際上就是空間換時間,可以參考kvm的實現:
每一項的定義,采用的是union的定義(會取最大的字節數進行內存分配)
/* Each of these represents one entry in the constant pool */
union constantPoolEntryStruct {
struct {
unsigned short classIndex;
unsigned short nameTypeIndex;
} method; /* Also used by Fields */
CLASS clazz;
INTERNED_STRING_INSTANCE String;
cell *cache; /* Either clazz or String */
cell integer;
long length;
NameTypeKey nameTypeKey;
NameKey nameKey;
UString ustring;
};
2. 常量池的定義:
注意:這里有多少個數組元素,實際上不確定的,這里只是占位而已,具體使用時是通過分配不同的
內存大小實現可變大小。
struct constantPoolStruct {
union constantPoolEntryStruct entries[1];
};
typedef struct constantPoolStruct* CONSTANTPOOL;
ConstantPool = (CONSTANTPOOL)callocPermanentObject(tableSize);
總結
以上是生活随笔為你收集整理的java字节码常量池_java字节码常量池处理说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ftp上传文件 linux_J
- 下一篇: java 生产配置文件管理_JAVA基础