108
109 // When String table needs to rehash
110 unsigned int oopDesc::new_hash(juint seed) {
111 EXCEPTION_MARK;
112 ResourceMark rm;
113 int length;
114 jchar* chars = java_lang_String::as_unicode_string(this, length, THREAD);
115 if (chars != NULL) {
116 // Use alternate hashing algorithm on the string
117 return AltHashing::murmur3_32(seed, chars, length);
118 } else {
119 vm_exit_out_of_memory(length, OOM_MALLOC_ERROR, "unable to create Unicode strings for String table rehash");
120 return 0;
121 }
122 }
123
124 VerifyOopClosure VerifyOopClosure::verify_oop;
125
126 template <class T> void VerifyOopClosure::do_oop_work(T* p) {
127 oop obj = oopDesc::load_decode_heap_oop(p);
128 guarantee(obj->is_oop_or_null(), "invalid oop: " INTPTR_FORMAT, p2i((oopDesc*) obj));
129 }
130
131 void VerifyOopClosure::do_oop(oop* p) { VerifyOopClosure::do_oop_work(p); }
132 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }
133
134 // type test operations that doesn't require inclusion of oop.inline.hpp.
135 bool oopDesc::is_instance_noinline() const { return is_instance(); }
136 bool oopDesc::is_array_noinline() const { return is_array(); }
137 bool oopDesc::is_objArray_noinline() const { return is_objArray(); }
138 bool oopDesc::is_typeArray_noinline() const { return is_typeArray(); }
139
140 bool oopDesc::has_klass_gap() {
141 // Only has a klass gap when compressed class pointers are used.
142 return UseCompressedClassPointers;
143 }
144
145 #if INCLUDE_CDS_JAVA_HEAP
146 bool oopDesc::is_archive_object(oop p) {
147 return (p == NULL) ? false : G1ArchiveAllocator::is_archive_object(p);
148 }
|
108
109 // When String table needs to rehash
110 unsigned int oopDesc::new_hash(juint seed) {
111 EXCEPTION_MARK;
112 ResourceMark rm;
113 int length;
114 jchar* chars = java_lang_String::as_unicode_string(this, length, THREAD);
115 if (chars != NULL) {
116 // Use alternate hashing algorithm on the string
117 return AltHashing::murmur3_32(seed, chars, length);
118 } else {
119 vm_exit_out_of_memory(length, OOM_MALLOC_ERROR, "unable to create Unicode strings for String table rehash");
120 return 0;
121 }
122 }
123
124 VerifyOopClosure VerifyOopClosure::verify_oop;
125
126 template <class T> void VerifyOopClosure::do_oop_work(T* p) {
127 oop obj = oopDesc::load_decode_heap_oop(p);
128 guarantee(oopDesc::is_oop_or_null(obj), "invalid oop: " INTPTR_FORMAT, p2i((oopDesc*) obj));
129 }
130
131 void VerifyOopClosure::do_oop(oop* p) { VerifyOopClosure::do_oop_work(p); }
132 void VerifyOopClosure::do_oop(narrowOop* p) { VerifyOopClosure::do_oop_work(p); }
133
134 // type test operations that doesn't require inclusion of oop.inline.hpp.
135 bool oopDesc::is_instance_noinline() const { return is_instance(); }
136 bool oopDesc::is_array_noinline() const { return is_array(); }
137 bool oopDesc::is_objArray_noinline() const { return is_objArray(); }
138 bool oopDesc::is_typeArray_noinline() const { return is_typeArray(); }
139
140 bool oopDesc::has_klass_gap() {
141 // Only has a klass gap when compressed class pointers are used.
142 return UseCompressedClassPointers;
143 }
144
145 #if INCLUDE_CDS_JAVA_HEAP
146 bool oopDesc::is_archive_object(oop p) {
147 return (p == NULL) ? false : G1ArchiveAllocator::is_archive_object(p);
148 }
|