< prev index next >

src/share/vm/memory/universe.cpp

Print this page
rev 11747 : [mq]: per.hotspot.patch
rev 11748 : imported patch pop_pl
rev 11751 : imported patch suppress_early_stacktrace

*** 133,142 **** --- 133,143 ---- oop Universe::_null_ptr_exception_instance = NULL; oop Universe::_arithmetic_exception_instance = NULL; oop Universe::_virtual_machine_error_instance = NULL; oop Universe::_vm_exception = NULL; oop Universe::_allocation_context_notification_obj = NULL; + oop Universe::_reference_pending_list = NULL; Array<int>* Universe::_the_empty_int_array = NULL; Array<u2>* Universe::_the_empty_short_array = NULL; Array<Klass*>* Universe::_the_empty_klass_array = NULL; Array<Method*>* Universe::_the_empty_method_array = NULL;
*** 210,219 **** --- 211,221 ---- f->do_oop((oop*)&_virtual_machine_error_instance); f->do_oop((oop*)&_main_thread_group); f->do_oop((oop*)&_system_thread_group); f->do_oop((oop*)&_vm_exception); f->do_oop((oop*)&_allocation_context_notification_obj); + f->do_oop((oop*)&_reference_pending_list); debug_only(f->do_oop((oop*)&_fullgc_alot_dummy_array);) } // Serialize metadata in and out of CDS archive, not oops. void Universe::serialize(SerializeClosure* f, bool do_all) {
*** 486,495 **** --- 488,526 ---- } delete java_lang_Class::fixup_mirror_list(); java_lang_Class::set_fixup_mirror_list(NULL); } + #define assert_pll_locked(test) \ + assert(Heap_lock->test(), "Reference pending list access requires lock") + + #define assert_pll_ownership() assert_pll_locked(owned_by_self) + + oop Universe::reference_pending_list() { + assert_pll_ownership(); + return _reference_pending_list; + } + + void Universe::set_reference_pending_list(oop list) { + assert_pll_ownership(); + _reference_pending_list = list; + } + + bool Universe::has_reference_pending_list() { + assert_pll_ownership(); + return _reference_pending_list != NULL; + } + + oop Universe::swap_reference_pending_list(oop list) { + assert_pll_locked(is_locked); + return (oop)Atomic::xchg_ptr(list, &_reference_pending_list); + } + + #undef assert_pll_locked + #undef assert_pll_ownership + + static bool has_run_finalizers_on_exit = false; void Universe::run_finalizers_on_exit() { if (has_run_finalizers_on_exit) return; has_run_finalizers_on_exit = true;
*** 563,578 **** } oop Universe::gen_out_of_memory_error(oop default_err) { // generate an out of memory error: ! // - if there is a preallocated error with backtrace available then return it wth ! // a filled in stack trace. ! // - if there are no preallocated errors with backtrace available then return ! // an error without backtrace. int next; ! if (_preallocated_out_of_memory_error_avail_count > 0) { next = (int)Atomic::add(-1, &_preallocated_out_of_memory_error_avail_count); assert(next < (int)PreallocatedOutOfMemoryErrorCount, "avail count is corrupt"); } else { next = -1; } --- 594,611 ---- } oop Universe::gen_out_of_memory_error(oop default_err) { // generate an out of memory error: ! // - if there is a preallocated error and stack traces are available ! // (j.l.Throwable is initialized), then return the preallocated ! // error with a filled in stack trace, and with the message ! // provided by the default error. ! // - otherwise, return the default error, without a stack trace. int next; ! if ((_preallocated_out_of_memory_error_avail_count > 0) && ! SystemDictionary::Throwable_klass()->is_initialized()) { next = (int)Atomic::add(-1, &_preallocated_out_of_memory_error_avail_count); assert(next < (int)PreallocatedOutOfMemoryErrorCount, "avail count is corrupt"); } else { next = -1; }
< prev index next >