< prev index next >

src/share/vm/gc/parallel/parallelScavengeHeap.cpp

Print this page

        

*** 248,268 **** if (gclocker_stalled_count > GCLockerRetryAllocationCount) { return NULL; } // Failed to allocate without a gc. ! if (GC_locker::is_active_and_needs_gc()) { // If this thread is not in a jni critical section, we stall // the requestor until the critical section has cleared and // GC allowed. When the critical section clears, a GC is // initiated by the last thread exiting the critical section; so // we retry the allocation sequence from the beginning of the loop, // rather than causing more, now probably unnecessary, GC attempts. JavaThread* jthr = JavaThread::current(); if (!jthr->in_critical()) { MutexUnlocker mul(Heap_lock); ! GC_locker::stall_until_clear(); gclocker_stalled_count += 1; continue; } else { if (CheckJNICalls) { fatal("Possible deadlock due to allocating while" --- 248,268 ---- if (gclocker_stalled_count > GCLockerRetryAllocationCount) { return NULL; } // Failed to allocate without a gc. ! if (GCLocker::is_active_and_needs_gc()) { // If this thread is not in a jni critical section, we stall // the requestor until the critical section has cleared and // GC allowed. When the critical section clears, a GC is // initiated by the last thread exiting the critical section; so // we retry the allocation sequence from the beginning of the loop, // rather than causing more, now probably unnecessary, GC attempts. JavaThread* jthr = JavaThread::current(); if (!jthr->in_critical()) { MutexUnlocker mul(Heap_lock); ! GCLocker::stall_until_clear(); gclocker_stalled_count += 1; continue; } else { if (CheckJNICalls) { fatal("Possible deadlock due to allocating while"
*** 348,358 **** } } } HeapWord* ParallelScavengeHeap::mem_allocate_old_gen(size_t size) { ! if (!should_alloc_in_eden(size) || GC_locker::is_active_and_needs_gc()) { // Size is too big for eden, or gc is locked out. return old_gen()->allocate(size); } // If a "death march" is in progress, allocate from the old gen a limited --- 348,358 ---- } } } HeapWord* ParallelScavengeHeap::mem_allocate_old_gen(size_t size) { ! if (!should_alloc_in_eden(size) || GCLocker::is_active_and_needs_gc()) { // Size is too big for eden, or gc is locked out. return old_gen()->allocate(size); } // If a "death march" is in progress, allocate from the old gen a limited
< prev index next >