273 Commits

Author SHA1 Message Date
John Cuthbertson
1065281a98 6983204: G1: Nightly test nsk/regression/b4958615 failing with +ExplicitGCInvokesConcurrent
Enable reference discovery during concurrent marking by setting the reference processor field of the concurrent marking closure. Keep reference objects on the discovered reference lists alive during incremental evacuation pauses until they are processed at the end of concurrent marking.

Reviewed-by: ysr, tonyp
2010-12-01 17:34:02 -08:00
Antonios Printezis
bb23e30511 6974966: G1: unnecessary direct-to-old allocations
This change revamps the slow allocation path of G1. Improvements include the following: a) Allocations directly to old regions are now totally banned. G1 now only allows allocations out of young regions (with the only exception being humongous regions). b) The thread that allocates a new region (which is now guaranteed to be young) does not dirty all its cards. Each thread that successfully allocates out of a young region is now responsible for dirtying the cards that corresponding to the "block" that just got allocated. c) allocate_new_tlab() and mem_allocate() are now implemented differently and TLAB allocations are only done by allocate_new_tlab(). d) If a thread schedules an evacuation pause in order to satisfy an allocation request, it will perform the allocation at the end of the safepoint so that the thread that initiated the GC also gets "first pick" of any space made available by the GC. e) If a thread is unable to allocate a humongous object it will schedule an evacuation pause in case it reclaims enough regions so that the humongous allocation can be satisfied aftewards. f) The G1 policy is more careful to set the young list target length to be the survivor number +1. g) Lots of code tidy up, removal, refactoring to make future changes easier.

Reviewed-by: johnc, ysr
2010-08-24 17:24:33 -04:00
Stefan Karlsson
8006fe8f75 6989984: Use standard include model for Hospot
Replaced MakeDeps and the includeDB files with more standardized solutions.

Reviewed-by: coleenp, kvn, kamg
2010-11-23 13:22:55 -08:00
John Cuthbertson
e5344b854c 6978187: G1: assert(ParallelGCThreads> 1 || n_yielded() == _hrrs->occupied()) strikes again
An evacuation failure while copying the roots caused an object, A, to be forwarded to itself. During the subsequent RSet updating a reference to A was processed causing the reference to be added to the RSet of A's heap region. As a result of adding to the remembered set we ran into the issue described in 6930581 - the sparse table expanded and the RSet scanning code walked the cards in one instance of RHashTable (_cur) while the occupied() counts the cards in the expanded table (_next).

Reviewed-by: tonyp, iveresov
2010-11-16 14:07:33 -08:00
Antonios Printezis
0c660e1f60 6991377: G1: race between concurrent refinement and humongous object allocation
There is a race between the concurrent refinement threads and the humongous object allocation that can cause the concurrent refinement threads to corrupt the part of the BOT that it is being initialized by the humongous object allocation operation. The solution is to do the humongous object allocation in careful steps to ensure that the concurrent refinement threads always have a consistent view over the BOT, region contents, and top. The fix includes some very minor tidying up in sparsePRT.

Reviewed-by: jcoomes, johnc, ysr
2010-10-16 17:12:19 -04:00
John Cuthbertson
f6acb9efb0 6988458: G1: assert(mr.end() <= _cm->finger()) failed: otherwise the region shouldn't be on the stack
The changes from 6941395 did not clear the CMTask::_aborted_region fields when concurrent marking aborted because of overflow. As a result, the next time around we could see a memory region whose start address was above the global finger and the assertion tripped. Moved the clearing of the aborted regions to ConcurrentMark::clear_marking_state, which is executed on all of the exit paths.

Reviewed-by: tonyp, ysr, jmasa
2010-10-18 15:01:41 -07:00
Antonios Printezis
0c9bfb6003 6992189: G1: inconsistent base used in sparse rem set iterator
The remembered set iterator for sparse tables incorrectly assumes that index 0 corresponds to the bottom of the heap, not address 0 as it is the case.

Reviewed-by: ysr, jmasa
2010-10-15 17:26:56 -04:00
Antonios Printezis
e79a62412f 6990359: G1: don't push a stolen entry on the taskqueue, deal with it directly
When an entry is stolen, don't push it on the task queue but process it directly.

Reviewed-by: iveresov, ysr, jcoomes
2010-10-14 10:38:14 -04:00
John Coomes
d85b042fca 6989448: G1: refactor and simplify G1ParScanThreadState
Reviewed-by: iveresov, tonyp
2010-10-12 11:29:45 -07:00
John Cuthbertson
02bad20969 6971296: G1: simplify G1RemSet class hierarchy
Remove G1RemSet base class and StupidG1RemSet class; rename HRInto_G1RemSet to just G1RemSet.

Reviewed-by: ysr, tonyp
2010-10-12 09:36:48 -07:00
Antonios Printezis
189be5a71f 6980838: G1: guarantee(false) failed: thread has an unexpected active value in its SATB queue
Under certain circumstances a safepoint could happen between a JavaThread object being created and that object being added to the Java threads list. This could cause the active field of that thread's SATB queue to get out-of-sync with respect to the other Java threads. The solution is to activate the SATB queue, when necessary, before adding the thread to the Java threads list, not when the JavaThread object is created. The changeset also includes a small fix to rename the surrogate locker thread from "Surrogate Locker Thread (CMS)" to "Surrogate Locker Thread (Concurrent GC)" since it's also used in G1.

Reviewed-by: iveresov, ysr, johnc, jcoomes
2010-10-01 16:43:05 -04:00
John Cuthbertson
20289fbffd 6983311: G1: LoopTest hangs when run with -XX:+ExplicitInvokesConcurrent
Clear the concurrent marking "in progress" flag while the FullGCCount_lock is held. This avoids a race that can cause back to back System.gc() calls, when ExplicitGCInvokesConcurrent is enabled, to fail to initiate a marking cycle causing the requesting thread to hang.

Reviewed-by: tonyp, ysr
2010-10-01 18:23:16 -07:00
John Coomes
1cdd538ea5 6423256: GC stacks should use a better data structure
6942771: SEGV in ParScanThreadState::take_from_overflow_stack

Reviewed-by: apetrusenko, ysr, pbk
2010-09-28 15:56:15 -07:00
John Cuthbertson
aff36499e7 6941395: G1: Use only lock-free versions of region stack push() and pop()
Re-enable use of the lock-free versions of region stack push() and pop() by recording aborted regions in a thread-local structure, which are then processed when scanning of the region stack restarts. The previous locking versions of these routines are retained for diagnostic purposes.

Reviewed-by: tonyp, ysr
2010-09-28 09:51:37 -07:00
Jon Masamitsu
28e56b8970 6984287: Regularize how GC parallel workers are specified
Associate number of GC workers with the workgang as opposed to the task.

Reviewed-by: johnc, ysr
2010-09-20 14:38:38 -07:00
John Cuthbertson
2b0e8a56df 6981746: G1: SEGV with -XX:+TraceGen0Time
Pass correct value for length to NumberSeq constructor. Guard dereferences of "body_summary" pointer with a NULL check.

Reviewed-by: tonyp, ysr
2010-09-13 10:00:24 -07:00
John Coomes
be6d973a49 6978300: G1: debug builds crash if ParallelGCThreads==0
Reviewed-by: tonyp, ysr
2010-08-25 14:39:55 -07:00
Antonios Printezis
ce2883fbbd 6975964: G1: print out a more descriptive message for evacuation failure when +PrintGCDetails is set
We're renaming "evacuation failure" to "to-space overflow". I'm also piggy-backing a small additional change which removes the "Mark closure took..." output.

Reviewed-by: ysr, johnc
2010-08-17 14:40:00 -04:00
Antonios Printezis
7125621712 6974928: G1: sometimes humongous objects are allocated in young regions
As the title says, sometimes we are allocating humongous objects in young regions and we shouldn't.

Reviewed-by: ysr, johnc
2010-08-17 14:40:00 -04:00
Antonios Printezis
1f0201f90b 6959014: G1: assert(minimum_desired_capacity <= maximum_desired_capacity) failed: sanity check
There are a few issues in the code that calculates whether to resize the heap and by how much: a) some calculations can overflow 32-bit size_t's, b) min_desired_capacity is not bounded by the max heap size, and c) the assrt that fires is in the wrong place. The fix also includes some tidying up of the related verbose code.

Reviewed-by: ysr, jmasa
2010-08-17 14:40:00 -04:00
John Cuthbertson
becf7cffb3 Merge 2010-08-14 00:47:52 -07:00
Vladimir Kozlov
2e48a18645 6975078: assert(allocated_on_res_area() || allocated_on_C_heap() || allocated_on_arena()
Pass the check in ResourceObj() if _allocation value is already set and object is allocated on stack.

Reviewed-by: dholmes, johnc
2010-08-09 15:17:05 -07:00
John Coomes
7fe1c05c7c 6966222: G1: simplify TaskQueue overflow handling
Reviewed-by: tonyp, ysr
2010-08-09 05:41:05 -07:00
John Cuthbertson
f8eed77f36 6930581: G1: assert(ParallelGCThreads > 1 || n_yielded() == _hrrs->occupied(),"Should have yielded all the .
During RSet updating, when ParallelGCThreads is zero, references that point into the collection set are added directly the referenced region's RSet. This can cause the sparse table in the RSet to expand. RSet scanning and the "occupied" routine will then operate on different instances of the sparse table causing the assert to trip. This may also cause some cards added post expansion to be missed during RSet scanning. When ParallelGCThreads is non-zero such references are recorded on the "references to be scanned" queue and the card containing the reference is recorded in a dirty card queue for use in the event of an evacuation failure. Employ the parallel code in the serial case to avoid expanding the RSets of regions in the collection set.

Reviewed-by: iveresov, ysr, tonyp
2010-08-06 10:17:21 -07:00
Antonios Printezis
b4148f3379 6963209: G1: remove the concept of abandoned pauses
As part of 6944166 we disabled the concept of abandoned pauses (i.e., if the collection set is empty, we would still try to do a pause even if it is to update the RSets and scan the roots). This changeset removes the code and structures associated with abandoned pauses.

Reviewed-by: iveresov, johnc
2010-08-04 13:03:23 -04:00
John Cuthbertson
3a2b2b4fd8 6814437: G1: remove the _new_refs array
The per-worker _new_refs array is used to hold references that point into the collection set. It is populated during RSet updating and subsequently processed. In the event of an evacuation failure it processed again to recreate the RSets of regions in the collection set. Remove the per-worker _new_refs array by processing the references directly. Use a DirtyCardQueue to hold the cards containing the references so that the RSets of regions in the collection set can be recreated when handling an evacuation failure.

Reviewed-by: iveresov, jmasa, tonyp
2010-08-02 12:51:43 -07:00
John Cuthbertson
5c3da1ee7e 6956639: G1: assert(cached_ptr != card_ptr) failed: shouldn't be, concurrentG1Refine.cpp:307
During concurrent refinment, filter cards in young regions after it has been determined that the region has been allocated from and the young type of the region has been set.

Reviewed-by: iveresov, tonyp, jcoomes
2010-07-19 11:06:34 -07:00
Antonios Printezis
dfc84e8c89 6944166: G1: explicit GCs are not always handled correctly
G1 was not handling explicit GCs correctly in many ways. It does now. See the CR for the list of improvements contained in this changeset.

Reviewed-by: iveresov, ysr, johnc
2010-06-28 14:13:17 -04:00
Antonios Printezis
3e2cf1a294 6946048: G1: improvements to +PrintGCDetails output
Small improvements to G1's PrintGCDetails output. It also includes minor formatting details.

Reviewed-by: ysr, johnc
2010-04-22 15:20:16 -04:00
Antonios Printezis
a6d2266193 6949307: G1: raise a vm error, do not core dump, if target pause time and target interval are inconsistent
First, change the guarantee to raising a vm error. Second, set the interval dynamically, and based on the pause time target, if it is not set explicitly.

Reviewed-by: ysr, johnc
2010-05-07 13:14:41 -04:00
Jon Masamitsu
428d02d5d7 Merge 2010-06-10 08:27:35 -07:00
John R Rose
d6a9b93b5a Merge 2010-06-02 22:45:42 -07:00
Erik Trimble
ba7c173659 6941466: Oracle rebranding changes for Hotspot repositories
Change all the Sun copyrights to Oracle copyright

Reviewed-by: ohair
2010-05-27 19:08:38 -07:00
Vladimir Kozlov
cc18a50e59 6916623: Align object to 16 bytes to use Compressed Oops with java heap up to 64Gb
Added new product ObjectAlignmentInBytes flag to control object alignment.

Reviewed-by: twisti, ysr, iveresov
2010-05-27 18:01:56 -07:00
John Cuthbertson
9936975b96 6941378: G1: change default value of G1UseFixedWindowMMUTracker to true
Rather than changing the default value of the G1UseFixedWindowMMUTracker, the flag and associated guarantee have been removed.

Reviewed-by: jcoomes, tonyp, ysr
2010-05-24 17:11:22 -07:00
John Coomes
8a34049f04 Merge 2010-05-20 08:32:11 -07:00
John Coomes
04b4d79094 6951319: enable solaris builds using Sun Studio 12 update 1
Reviewed-by: kamg, ysr, dholmes, johnc
2010-05-18 11:02:18 -07:00
Andrey Petrusenko
0d3978019b 6921317: (partial) G1: assert(top() == bottom() || zfs == Allocated,"Region must be empty, or we must be setting it to
Extended the failing assertion with the new message format to get more data.

Reviewed-by: tonyp
2010-05-14 10:28:46 -07:00
Erik Trimble
8878667a36 Merge 2010-05-13 14:35:14 -07:00
Phil Race
db63a9aa55 6931180: Migration to recent versions of MS Platform SDK
6951582: Build problems on win64

Changes to enable building JDK7 with Microsoft Visual Studio 2010

Reviewed-by: ohair, art, ccheung, dcubed
2010-05-11 14:35:43 -07:00
John Cuthbertson
b1867e0dd5 6819061: G1: eliminate serial Other times that are proportional to the collection set length
6871109: G1: remove the concept of the scan only prefix

Removed scan only regions and associated code. The young portion of the collection set is now constructed incrementally - when a young region is retired as the current allocation region it is added to the collection set.

Reviewed-by: apetrusenko, iveresov, tonyp
2010-04-22 10:02:38 -07:00
Andrey Petrusenko
99cdb36eca 6942253: G1: replace G1ParallelGCAllocBufferSize with YoungPLABSize and OldPLABSize
Replaces the G1-specific parameter with the existing ones that are used by the other GCs (YoungPLABSize and OldPLABSize)

Reviewed-by: tonyp, johnc
2010-04-16 08:48:16 -07:00
Antonios Printezis
89dcd228da 6939027: G1: assertion failure during the concurrent phase of cleanup
The outgoing region map is not maintained properly and it's causing an assert failure. Given that we don't actually use it, I'm removing it. I'm piggy-backing a small change on this which removes a message that it's printed before a Full GC when DisableExplicitGC is set.

Reviewed-by: apetrusenko, ysr
2010-04-15 18:45:30 -04:00
John Cuthbertson
6110c052aa 6943926: G1: Integer overflow during heap region verification
The expression that calculates the live bytes for a heap region can overflow for a suitably large humongous region/object. Cache the object size in a suitably sized local variable so that the expression is converted to a wider type.

Reviewed-by: tonyp, jmasa, iveresov, apetrusenko
2010-04-15 15:52:55 -07:00
Antonios Printezis
9b4fc8fc23 6937142: G1: improvements to debugging output (S-M)
Various fixes to the G1 debugging output.

Reviewed-by: johnc, iveresov
2010-03-30 15:43:03 -04:00
Jon Masamitsu
f5197d0d36 6858496: Clear all SoftReferences before an out-of-memory due to GC overhead limit
Ensure a full GC that clears SoftReferences before throwing an out-of-memory

Reviewed-by: ysr, jcoomes
2010-04-13 13:52:10 -07:00
John Cuthbertson
b98560aa10 6940894: G1: assert(new_obj != 0 || ... "should be forwarded") for compaction tests
Humongous regions may contain multiple objects as a result of being retained as to-space from a previous GC and then re-used as to-space after being tagged as humongous. These changes include a check that causes retained to-space regions that are now tagged as humongous to be disregarded and a new to-space region allocated.

Reviewed-by: tonyp, iveresov
2010-04-07 11:43:53 -07:00
Antonios Printezis
719e7f0926 6909756: G1: guarantee(G1CollectedHeap::heap()->mark_in_progress(),"Precondition.")
Make sure that two marking cycles do not overlap, i.e., a new one can only start after the concurrent marking thread finishes all its work. In the fix I piggy-back a couple of minor extra fixes: some general code reformatting for consistency (only around the code I modified), the removal of a field (G1CollectorPolicy::_should_initiate_conc_mark) which doesn't seem to be used at all (it's only set but never read), as well as moving the "is GC locker active" test earlier into the G1 pause / Full GC and using a more appropriate method for it.

Reviewed-by: johnc, jmasa, jcoomes, ysr
2010-04-06 10:59:45 -04:00
Antonios Printezis
2e3363d109 6940310: G1: MT-unsafe calls to CM::region_stack_push() / CM::region_stack_pop()
Calling the methods region_stack_push() and region_stack_pop() concurrent is not MT-safe. The assumption is that we will only call region_stack_push() during a GC pause and region_stack_pop() during marking. Unfortunately, we also call region_stack_push() during marking which seems to be introducing subtle marking failures. This change introduces lock-based methods for pushing / popping to be called during marking.

Reviewed-by: iveresov, johnc
2010-04-05 12:19:22 -04:00
Antonios Printezis
9545c0521e 6677708: G1: re-enable parallel RSet updating and scanning
Enable parallel RSet updating and scanning.

Reviewed-by: iveresov, jmasa
2010-04-02 12:10:08 -04:00