Mercurial > hg > graal-jvmci-8
comparison src/share/vm/utilities/hashtable.cpp @ 6725:da91efe96a93
6964458: Reimplement class meta-data storage to use native memory
Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author | coleenp |
---|---|
date | Sat, 01 Sep 2012 13:25:18 -0400 |
parents | 5e2dc722e70d |
children | a5d6f0c3585f |
comparison
equal
deleted
inserted
replaced
6724:36d1d483d5d6 | 6725:da91efe96a93 |
---|---|
92 return false; | 92 return false; |
93 } | 93 } |
94 | 94 |
95 template <class T, MEMFLAGS F> jint Hashtable<T, F>::_seed = 0; | 95 template <class T, MEMFLAGS F> jint Hashtable<T, F>::_seed = 0; |
96 | 96 |
97 template <class T, MEMFLAGS F> unsigned int Hashtable<T, F>::new_hash(Symbol* sym) { | |
98 ResourceMark rm; | |
99 // Use alternate hashing algorithm on this symbol. | |
100 return AltHashing::murmur3_32(seed(), (const jbyte*)sym->as_C_string(), sym->utf8_length()); | |
101 } | |
102 | |
103 template <class T, MEMFLAGS F> unsigned int Hashtable<T, F>::new_hash(oop string) { | |
104 ResourceMark rm; | |
105 int length; | |
106 jchar* chars = java_lang_String::as_unicode_string(string, length); | |
107 // Use alternate hashing algorithm on the string | |
108 return AltHashing::murmur3_32(seed(), chars, length); | |
109 } | |
110 | |
111 // Create a new table and using alternate hash code, populate the new table | 97 // Create a new table and using alternate hash code, populate the new table |
112 // with the existing elements. This can be used to change the hash code | 98 // with the existing elements. This can be used to change the hash code |
113 // and could in the future change the size of the table. | 99 // and could in the future change the size of the table. |
114 | 100 |
115 template <class T, MEMFLAGS F> void Hashtable<T, F>::move_to(Hashtable<T, F>* new_table) { | 101 template <class T, MEMFLAGS F> void Hashtable<T, F>::move_to(Hashtable<T, F>* new_table) { |
124 for (int i = 0; i < new_table->table_size(); ++i) { | 110 for (int i = 0; i < new_table->table_size(); ++i) { |
125 for (HashtableEntry<T, F>* p = bucket(i); p != NULL; ) { | 111 for (HashtableEntry<T, F>* p = bucket(i); p != NULL; ) { |
126 HashtableEntry<T, F>* next = p->next(); | 112 HashtableEntry<T, F>* next = p->next(); |
127 T string = p->literal(); | 113 T string = p->literal(); |
128 // Use alternate hashing algorithm on the symbol in the first table | 114 // Use alternate hashing algorithm on the symbol in the first table |
129 unsigned int hashValue = new_hash(string); | 115 unsigned int hashValue = string->new_hash(seed()); |
130 // Get a new index relative to the new table (can also change size) | 116 // Get a new index relative to the new table (can also change size) |
131 int index = new_table->hash_to_index(hashValue); | 117 int index = new_table->hash_to_index(hashValue); |
132 p->set_hash(hashValue); | 118 p->set_hash(hashValue); |
133 // Keep the shared bit in the Hashtable entry to indicate that this entry | 119 // Keep the shared bit in the Hashtable entry to indicate that this entry |
134 // can't be deleted. The shared bit is the LSB in the _next field so | 120 // can't be deleted. The shared bit is the LSB in the _next field so |
312 } | 298 } |
313 } | 299 } |
314 | 300 |
315 #endif | 301 #endif |
316 // Explicitly instantiate these types | 302 // Explicitly instantiate these types |
317 template class Hashtable<constantPoolOop, mtClass>; | 303 template class Hashtable<ConstantPool*, mtClass>; |
318 template class Hashtable<Symbol*, mtSymbol>; | 304 template class Hashtable<Symbol*, mtSymbol>; |
319 template class Hashtable<klassOop, mtClass>; | 305 template class Hashtable<Klass*, mtClass>; |
320 template class Hashtable<oop, mtClass>; | 306 template class Hashtable<oop, mtClass>; |
321 #ifdef SOLARIS | 307 #ifdef SOLARIS |
322 template class Hashtable<oop, mtSymbol>; | 308 template class Hashtable<oop, mtSymbol>; |
323 #endif | 309 #endif |
324 template class Hashtable<oopDesc*, mtSymbol>; | 310 template class Hashtable<oopDesc*, mtSymbol>; |