< 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 >