< prev index next >

src/hotspot/share/memory/universe.cpp

Print this page

*** 83,104 **** #include "utilities/hashtable.inline.hpp" #include "utilities/macros.hpp" #include "utilities/ostream.hpp" #include "utilities/preserveException.hpp" // Known objects Klass* Universe::_typeArrayKlassObjs[T_LONG+1] = { NULL /*, NULL...*/ }; Klass* Universe::_objectArrayKlassObj = NULL; - oop Universe::_int_mirror = NULL; - oop Universe::_float_mirror = NULL; - oop Universe::_double_mirror = NULL; - oop Universe::_byte_mirror = NULL; - oop Universe::_bool_mirror = NULL; - oop Universe::_char_mirror = NULL; - oop Universe::_long_mirror = NULL; - oop Universe::_short_mirror = NULL; - oop Universe::_void_mirror = NULL; oop Universe::_mirrors[T_VOID+1] = { NULL /*, NULL...*/ }; oop Universe::_main_thread_group = NULL; oop Universe::_system_thread_group = NULL; objArrayOop Universe::_the_empty_class_klass_array = NULL; Array<Klass*>* Universe::_the_array_interfaces_array = NULL; --- 83,110 ---- #include "utilities/hashtable.inline.hpp" #include "utilities/macros.hpp" #include "utilities/ostream.hpp" #include "utilities/preserveException.hpp" + #define PRIMITIVE_MIRRORS_DO(func) \ + func(_int_mirror) \ + func(_float_mirror) \ + func(_double_mirror) \ + func(_byte_mirror) \ + func(_bool_mirror) \ + func(_char_mirror) \ + func(_long_mirror) \ + func(_short_mirror) \ + func(_void_mirror) + + #define DEFINE_PRIMITIVE_MIRROR(m) \ + oop Universe::m = NULL; + // Known objects + PRIMITIVE_MIRRORS_DO(DEFINE_PRIMITIVE_MIRROR) Klass* Universe::_typeArrayKlassObjs[T_LONG+1] = { NULL /*, NULL...*/ }; Klass* Universe::_objectArrayKlassObj = NULL; oop Universe::_mirrors[T_VOID+1] = { NULL /*, NULL...*/ }; oop Universe::_main_thread_group = NULL; oop Universe::_system_thread_group = NULL; objArrayOop Universe::_the_empty_class_klass_array = NULL; Array<Klass*>* Universe::_the_array_interfaces_array = NULL;
*** 165,185 **** for (int i = T_BOOLEAN; i < T_LONG+1; i++) { closure->do_klass(_typeArrayKlassObjs[i]); } } ! void Universe::oops_do(OopClosure* f) { ! f->do_oop((oop*) &_int_mirror); ! f->do_oop((oop*) &_float_mirror); ! f->do_oop((oop*) &_double_mirror); ! f->do_oop((oop*) &_byte_mirror); ! f->do_oop((oop*) &_bool_mirror); ! f->do_oop((oop*) &_char_mirror); ! f->do_oop((oop*) &_long_mirror); ! f->do_oop((oop*) &_short_mirror); ! f->do_oop((oop*) &_void_mirror); for (int i = T_BOOLEAN; i < T_VOID+1; i++) { f->do_oop((oop*) &_mirrors[i]); } assert(_mirrors[0] == NULL && _mirrors[T_BOOLEAN - 1] == NULL, "checking"); --- 171,185 ---- for (int i = T_BOOLEAN; i < T_LONG+1; i++) { closure->do_klass(_typeArrayKlassObjs[i]); } } ! #define DO_PRIMITIVE_MIRROR(m) \ ! f->do_oop((oop*) &m); ! void Universe::oops_do(OopClosure* f) { ! PRIMITIVE_MIRRORS_DO(DO_PRIMITIVE_MIRROR); for (int i = T_BOOLEAN; i < T_VOID+1; i++) { f->do_oop((oop*) &_mirrors[i]); } assert(_mirrors[0] == NULL && _mirrors[T_BOOLEAN - 1] == NULL, "checking");
*** 229,265 **** _throw_illegal_access_error_cache->metaspace_pointers_do(it); _throw_no_such_method_error_cache->metaspace_pointers_do(it); _do_stack_walk_cache->metaspace_pointers_do(it); } // Serialize metadata and pointers to primitive type mirrors in and out of CDS archive void Universe::serialize(SerializeClosure* f) { for (int i = 0; i < T_LONG+1; i++) { f->do_ptr((void**)&_typeArrayKlassObjs[i]); } f->do_ptr((void**)&_objectArrayKlassObj); #if INCLUDE_CDS_JAVA_HEAP ! #ifdef ASSERT ! if (DumpSharedSpaces && !HeapShared::is_heap_object_archiving_allowed()) { ! assert(_int_mirror == NULL && _float_mirror == NULL && ! _double_mirror == NULL && _byte_mirror == NULL && ! _bool_mirror == NULL && _char_mirror == NULL && ! _long_mirror == NULL && _short_mirror == NULL && ! _void_mirror == NULL, "mirrors should be NULL"); ! } ! #endif ! f->do_mirror_oop(&_int_mirror); ! f->do_mirror_oop(&_float_mirror); ! f->do_mirror_oop(&_double_mirror); ! f->do_mirror_oop(&_byte_mirror); ! f->do_mirror_oop(&_bool_mirror); ! f->do_mirror_oop(&_char_mirror); ! f->do_mirror_oop(&_long_mirror); ! f->do_mirror_oop(&_short_mirror); ! f->do_mirror_oop(&_void_mirror); #endif f->do_ptr((void**)&_the_array_interfaces_array); f->do_ptr((void**)&_the_empty_int_array); f->do_ptr((void**)&_the_empty_short_array); --- 229,259 ---- _throw_illegal_access_error_cache->metaspace_pointers_do(it); _throw_no_such_method_error_cache->metaspace_pointers_do(it); _do_stack_walk_cache->metaspace_pointers_do(it); } + #define ASSERT_MIRROR_NULL(m) \ + assert(m == NULL, "archived mirrors should be NULL"); + + #define SERIALIZE_MIRROR(m) \ + f->do_oop(&m); \ + if (m != NULL) { java_lang_Class::update_archived_primitive_mirror_native_pointers(m); } + // Serialize metadata and pointers to primitive type mirrors in and out of CDS archive void Universe::serialize(SerializeClosure* f) { for (int i = 0; i < T_LONG+1; i++) { f->do_ptr((void**)&_typeArrayKlassObjs[i]); } f->do_ptr((void**)&_objectArrayKlassObj); + #if INCLUDE_CDS_JAVA_HEAP ! DEBUG_ONLY(if (DumpSharedSpaces && !HeapShared::is_heap_object_archiving_allowed()) { ! PRIMITIVE_MIRRORS_DO(ASSERT_MIRROR_NULL); ! }); ! PRIMITIVE_MIRRORS_DO(SERIALIZE_MIRROR); #endif f->do_ptr((void**)&_the_array_interfaces_array); f->do_ptr((void**)&_the_empty_int_array); f->do_ptr((void**)&_the_empty_short_array);
*** 422,443 **** assert(i == _fullgc_alot_dummy_array->length(), "just checking"); } #endif } void Universe::initialize_basic_type_mirrors(TRAPS) { #if INCLUDE_CDS_JAVA_HEAP if (UseSharedSpaces && HeapShared::open_archive_heap_region_mapped() && _int_mirror != NULL) { assert(HeapShared::is_heap_object_archiving_allowed(), "Sanity"); ! assert(_float_mirror != NULL && _double_mirror != NULL && ! _byte_mirror != NULL && _byte_mirror != NULL && ! _bool_mirror != NULL && _char_mirror != NULL && ! _long_mirror != NULL && _short_mirror != NULL && ! _void_mirror != NULL, "Sanity"); } else #endif { _int_mirror = java_lang_Class::create_basic_type_mirror("int", T_INT, CHECK); _float_mirror = --- 416,437 ---- assert(i == _fullgc_alot_dummy_array->length(), "just checking"); } #endif } + #define ASSERT_MIRROR_NOT_NULL(m) \ + assert(m != NULL, "archived mirrors should not be NULL"); + void Universe::initialize_basic_type_mirrors(TRAPS) { #if INCLUDE_CDS_JAVA_HEAP if (UseSharedSpaces && HeapShared::open_archive_heap_region_mapped() && _int_mirror != NULL) { assert(HeapShared::is_heap_object_archiving_allowed(), "Sanity"); ! PRIMITIVE_MIRRORS_DO(ASSERT_MIRROR_NOT_NULL); } else + // _int_mirror could be NULL if archived heap is not mapped. #endif { _int_mirror = java_lang_Class::create_basic_type_mirror("int", T_INT, CHECK); _float_mirror =
< prev index next >