282 if (use_java_hash()) {
283 hash = java_lang_String::hash_code(data, length);
284 } else {
285 hash = AltHashing::murmur3_32(_table->_hash_seed, data, length);
286 }
287 } else {
288 length /= sizeof(jchar) / sizeof(jbyte); // Convert number of bytes to number of chars
289 const jchar* data = (jchar*)value->base(T_CHAR);
290 if (use_java_hash()) {
291 hash = java_lang_String::hash_code(data, length);
292 } else {
293 hash = AltHashing::murmur3_32(_table->_hash_seed, data, length);
294 }
295 }
296
297 return hash;
298 }
299
300 void G1StringDedupTable::deduplicate(oop java_string, G1StringDedupStat& stat) {
301 assert(java_lang_String::is_instance(java_string), "Must be a string");
302 No_Safepoint_Verifier nsv;
303
304 stat.inc_inspected();
305
306 typeArrayOop value = java_lang_String::value(java_string);
307 if (value == NULL) {
308 // String has no value
309 stat.inc_skipped();
310 return;
311 }
312
313 bool latin1 = java_lang_String::is_latin1(java_string);
314 unsigned int hash = 0;
315
316 if (use_java_hash()) {
317 // Get hash code from cache
318 hash = java_lang_String::hash(java_string);
319 }
320
321 if (hash == 0) {
322 // Compute hash
|
282 if (use_java_hash()) {
283 hash = java_lang_String::hash_code(data, length);
284 } else {
285 hash = AltHashing::murmur3_32(_table->_hash_seed, data, length);
286 }
287 } else {
288 length /= sizeof(jchar) / sizeof(jbyte); // Convert number of bytes to number of chars
289 const jchar* data = (jchar*)value->base(T_CHAR);
290 if (use_java_hash()) {
291 hash = java_lang_String::hash_code(data, length);
292 } else {
293 hash = AltHashing::murmur3_32(_table->_hash_seed, data, length);
294 }
295 }
296
297 return hash;
298 }
299
300 void G1StringDedupTable::deduplicate(oop java_string, G1StringDedupStat& stat) {
301 assert(java_lang_String::is_instance(java_string), "Must be a string");
302 NoSafepointVerifier nsv;
303
304 stat.inc_inspected();
305
306 typeArrayOop value = java_lang_String::value(java_string);
307 if (value == NULL) {
308 // String has no value
309 stat.inc_skipped();
310 return;
311 }
312
313 bool latin1 = java_lang_String::is_latin1(java_string);
314 unsigned int hash = 0;
315
316 if (use_java_hash()) {
317 // Get hash code from cache
318 hash = java_lang_String::hash(java_string);
319 }
320
321 if (hash == 0) {
322 // Compute hash
|