一、常量池使用 的数据结构
常量池底层使用HashTable
key 是字符串和长度生成的hashValue,然后再hash生成index, 改index就是key;Value是一个HashTableEntry;
1、key
hashValue = hash string(name, len)
index = hash to index(hashValue);
1、根据字符串(即 name)以及字符串的长度计算出hashValue
2、根据hashValue计算出index,这个index就是key
2、value
1、HashtableEntry<oop, mtSymbol>* entry = new entry(hashValue, string());
2、将Java的string类的实例instanceOopDesc封装成HashtableEntry
3、struct HashtableEntry {
INT PTR hash;
void* key;
void* value; instanceopDesc
HashtableEntry* next;
};
二、JVM底层是如何操作常量池
String s = "1";
1、去字符串常量池中去查, 有直接返回对应的string对象
2、如果没有,就会创建string对象、char数组对象,typeArrayOopDesc
3、将这个string对象对应的InstanceOopDesc封装成HashtableEntry,作为StringTable的value进行