Commit graph

78 commits

Author SHA1 Message Date
Mikael Gerdin
b5ef32af36 8065358: Refactor G1s usage of save_marks and reduce related races
Stop using save_marks in G1 related code and make setting the replacement field less racy.

Reviewed-by: brutisso, tschatzl
2014-11-26 10:53:31 +01:00
Marcus Larsson
5fd7516136 8043243: convert SCAN_AND_FORWARD, SCAN_AND_ADJUST_POINTERS, SCAN_AND_COMPACT macros to methods
Reviewed-by: mgerdin, kbarrett
2014-10-30 12:45:22 +01:00
Marcus Larsson
6d1c35615a 8058298: Separate heap region iterator claim values from the data structures iterated over
Reviewed-by: tschatzl, brutisso
2014-10-07 14:54:53 +02:00
Antonios Printezis
da5afa76ab 8058495: G1: normalize names for isHumongous() and friends
Reviewed-by: tschatzl, brutisso
2014-09-23 11:43:24 +02:00
Stefan Johansson
3e6d46d28b 8057658: Enable G1 FullGC extensions
Refactored the G1 FullGC code to enable it to be extended.

Reviewed-by: mgerdin, brutisso
2014-09-09 00:05:25 +02:00
Stefan Johansson
f8137659f5 8057536: Refactor G1 to allow context specific allocations
Splitting out a g1 allocator class to simply specialized allocators which can associate each allocation with a given context.

Reviewed-by: mgerdin, brutisso
2014-09-05 09:49:19 +02:00
Joseph Provino
bc07a22d12 8058534: Remove HeapRegion::_orig_end
Also reviewed by kim.barrett@oracle.com

Reviewed-by: tonyp, brutisso, tschatzl
2014-09-19 09:23:55 +02:00
Antonios Printezis
a2984b6c88 8057768: Make heap region region type in G1 HeapRegion explicit
Reviewed-by: brutisso, tschatzl
2014-09-15 12:19:31 +02:00
Mikael Gerdin
10379e7e82 8048268: G1 Code Root Migration performs poorly
Replace G1CodeRootSet with a Hashtable based implementation, merge Code Root Migration phase into Code Root Scanning

Reviewed-by: jmasa, brutisso, tschatzl
2014-08-29 13:12:21 +02:00
Thomas Schatzl
146c4f6999 Merge 2014-08-28 17:06:29 +02:00
Thomas Schatzl
344be39551 8054808: Bitmap verification sometimes fails after Full GC aborts concurrent mark
The verification code that checked whether no bitmap mark had been found re-read HeapRegion::end() after the check on the bitmap. Concurrent humongous object allocation could have changed HeapRegion::end() in the meantime. Fix this by using the actual end of the region instead of HeapRegion::end() for comparison.

Reviewed-by: brutisso, jmasa
2014-08-28 17:05:41 +02:00
Bengt Rutisson
bbe82cb85b 8055816: Remove dead code in g1BlockOffsetTable
Reviewed-by: tschatzl, mgerdin
2014-08-27 10:51:08 +02:00
Thomas Schatzl
9086b5795f 8054819: Rename HeapRegionSeq to HeapRegionManager
Reviewed-by: jwilhelm, jmasa
2014-08-26 09:36:53 +02:00
Thomas Schatzl
2ee5ee89d4 8054818: Refactor HeapRegionSeq to manage heap region and auxiliary data
Let HeapRegionSeq manage the heap region and auxiliary data to decrease the amount of responsibilities of G1CollectedHeap, and encapsulate this work from other code.

Reviewed-by: jwilhelm, jmasa, mgerdin, brutisso
2014-08-18 16:10:44 +02:00
Stefan Karlsson
1b001a2afd 8049421: G1 Class Unloading after completing a concurrent mark cycle
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Reviewed-by: tschatzl, ehelin, brutisso, coleenp, roland, iveresov
2014-07-07 10:12:40 +02:00
Stefan Karlsson
ef1e9b3c80 8049420: Backout 8048248 to correct attribution
Reviewed-by: ehelin, brutisso
2014-07-07 12:37:11 +02:00
Stefan Karlsson
8c3aced316 8048248: G1 Class Unloading after completing a concurrent mark cycle
Reviewed-by: tschatzl, ehelin, brutisso, coleenp, roland, iveresov
2014-07-07 10:12:40 +02:00
Mikael Gerdin
1e1ef4f73f 8047818: G1 HeapRegions can no longer be ContiguousSpaces
Change parent of G1OffsetTableContigSpace to CompactibleSpace, reimplement missing functionality

Reviewed-by: stefank, jmasa, tschatzl
2014-06-26 11:36:58 +02:00
Mikael Gerdin
83303777f7 8047821: G1 Does not use the save_marks functionality as intended
Rename save_marks to record_top_and_timestamp and remove som unused but related methods

Reviewed-by: stefank, ehelin
2014-06-26 10:00:00 +02:00
Mikael Gerdin
cfa1c5e67c 8047820: G1 Block offset table does not need to support generic Space classes
Reviewed-by: tschatzl, stefank
2014-06-25 16:53:13 +02:00
Mikael Gerdin
5b7c529bb2 8047819: G1 HeapRegionDCTOC does not need to inherit ContiguousSpaceDCTOC
Reviewed-by: stefank, tschatzl
2014-06-25 10:55:10 +02:00
David Chase
305ec3bd3f 8037816: Fix for 8036122 breaks build with Xcode5/clang
Repaired or selectively disabled offending formats; future-proofed with additional checking

Reviewed-by: kvn, jrose, stefank
2014-05-09 16:50:54 -04:00
Jesper Wilhelmsson
1e1ad7f132 8036025: Sort the freelist in order to shrink the heap
The free list is being maintained in a sorted fashion and old and humongous regions are allocated from the bottom of the heap while young regions are allocated at the top.

Co-authored-by: Staffan Friberg <staffan.friberg@oracle.com>
Reviewed-by: tschatzl, mgerdin
2014-02-28 15:27:09 +01:00
Thomas Schatzl
d3e28ca682 8027295: Free CSet takes ~50% of young pause time
Improve fast card cache iteration and avoid taking locks when freeing the collection set.

Reviewed-by: brutisso
2014-03-17 10:13:18 +01:00
Thomas Schatzl
962008f22b 8010722: assert: failed: heap size is too big for compressed oops
Use conservative assumptions of required alignment for the various garbage collector components into account when determining the maximum heap size that supports compressed oops. Using this conservative value avoids several circular dependencies in the calculation.

Reviewed-by: stefank, dholmes
2013-09-11 16:25:02 +02:00
Bengt Rutisson
6d7626dba4 8019902: G1: Use the average heap size rather than the minimum heap size to calculate the region size
Reviewed-by: tonyp, tschatzl, sjohanss
2013-08-30 07:31:47 +02:00
John Cuthbertson
f63547bf71 7145569: G1: optimize nmethods scanning
Add a list of nmethods to the RSet for a region that contain references into the region. Skip scanning the code cache during root scanning and scan the nmethod lists during RSet scanning instead.

Reviewed-by: tschatzl, brutisso, mgerdin, twisti, kvn
2013-08-15 10:52:18 +02:00
Joseph Provino
698fba94ef 8005915: Unify SERIALGC and INCLUDE_ALTERNATE_GCS
Rename INCLUDE_ALTERNATE_GCS to INCLUDE_ALL_GCS and replace SERIALGC with INCLUDE_ALL_GCS.

Reviewed-by: coleenp, stefank
2013-01-23 13:02:39 -05:00
Brandon Mitchell
6573cbf346 7016955: G1: remove the is_zeroed parameter from the HeapRegion constructor
The is_zeroed parameter is no longer used and so can be removed.

Reviewed-by: johnc, jmasa, brutisso
2012-09-19 08:48:10 -07:00
Jon Masamitsu
5c58d27aac 6964458: Reimplement class meta-data storage to use native memory
Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes

Co-authored-by: Stefan Karlsson <stefan.karlsson@oracle.com>
Co-authored-by: Mikael Gerdin <mikael.gerdin@oracle.com>
Co-authored-by: Tom Rodriguez <tom.rodriguez@oracle.com>
Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland
2012-09-01 13:25:18 -04:00
Antonios Printezis
a6580a7e63 7114678: G1: various small fixes, code cleanup, and refactoring
Various cleanups as a prelude to introducing iterators for HeapRegions.

Reviewed-by: johnc, brutisso
2012-07-19 15:15:54 -07:00
John Cuthbertson
377a04fe57 7143490: G1: Remove HeapRegion::_top_at_conc_mark_count
Removed the HeapRegion::_top_at_conc_mark_count field. It is no longer needed as a result of the changes for 6888336 and 7127706. Refactored the closures that finalize and verify the liveness counting data so that common functionality was placed into a base class.

Reviewed-by: brutisso, tonyp
2012-04-25 10:23:12 -07:00
Antonios Printezis
0afaaf8d36 7145441: G1: collection set chooser-related cleanup
Cleanup of the CSet chooser class: standardize on uints for region num and indexes (instead of int, jint, etc.), make the method / field naming style more consistent, remove a lot of dead code.

Reviewed-by: johnc, brutisso
2012-04-18 13:39:55 -04:00
Antonios Printezis
01ea4199c7 7157073: G1: type change size_t -> uint for region counts / indexes
Change the type of fields / variables / etc. that represent region counts and indeces from size_t to uint.

Reviewed-by: iveresov, brutisso, jmasa, jwilhelm
2012-04-18 07:21:15 -04:00
Bengt Rutisson
f695b75d78 4988100: oop_verify_old_oop appears to be dead
Removed oop_verify_old_oop and allow_dirty. Also reviewed by: alexlamsl@gmail.com

Reviewed-by: jmasa, jwilhelm
2012-04-16 08:57:18 +02:00
Antonios Printezis
29afa9bf4b 7127697: G1: remove dead code after recent concurrent mark changes
Removed lots of dead code after some recent conc mark changes.

Reviewed-by: brutisso, johnc
2012-04-05 13:57:23 -04:00
Antonios Printezis
be06406cb8 7132029: G1: mixed GC phase lasts for longer than it should
Revamp of the mechanism that chooses old regions for inclusion in the CSet. It simplifies the code and introduces min and max bounds on the number of old regions added to the CSet at each mixed GC to avoid pathological cases. It also ensures that when we do a mixed GC we'll always find old regions to add to the CSet (i.e., it eliminates the case where a mixed GC will collect no old regions which can happen today).

Reviewed-by: johnc, brutisso
2012-02-15 13:06:53 -05:00
John Cuthbertson
0fa6fc2279 6484965: G1: piggy-back liveness accounting phase on marking
Remove the separate counting phase of concurrent marking by tracking the amount of marked bytes and the cards spanned by marked objects in marking task/worker thread local data structures, which are updated as individual objects are marked.

Reviewed-by: brutisso, tonyp
2012-01-12 00:06:47 -08:00
Antonios Printezis
1d3b26e52b 6888336: G1: avoid explicitly marking and pushing objects in survivor spaces
This change simplifies the interaction between GC and concurrent marking. By disabling survivor spaces during the initial-mark pause we don't need to propagate marks of objects we copy during each GC (since we never need to copy an explicitly marked object).

Reviewed-by: johnc, brutisso
2012-01-10 18:58:13 -05:00
John Cuthbertson
39d61f89a2 7121496: G1: do the per-region evacuation failure handling work in parallel
Parallelize the removal of self forwarding pointers etc. by wrapping in a HeapRegion closure, which is then wrapped inside an AbstractGangTask.

Reviewed-by: tonyp, iveresov
2011-12-23 11:14:18 -08:00
John Cuthbertson
a3311881b5 7112743: G1: Reduce overhead of marking closure during evacuation pauses
Parallelize the serial code that was used to mark objects reachable from survivor objects in the collection set. Some minor improvments in the timers used to track the freeing of the collection set along with some tweaks to PrintGCDetails.

Reviewed-by: tonyp, brutisso
2011-11-17 12:40:15 -08:00
John Cuthbertson
a03f061ca2 7111795: G1: Various cleanups identified during walk through of changes for 6484965
Various cleanups and formatting changes identified during a code walk through of the changes for 6484965 ("G1: piggy-back liveness accounting phase on marking").

Reviewed-by: brutisso, tonyp
2011-11-18 12:27:10 -08:00
John Cuthbertson
72c2cfef4f 7096030: G1: PrintGCDetails enhancements
7102445: G1: Unnecessary Resource allocations during RSet scanning

Add a new per-worker thread line in the PrintGCDetails output. GC Worker Other is the difference between the elapsed time for the parallel phase of the evacuation pause and the sum of the times of the sub-phases (external root scanning, mark stack scanning, RSet updating, RSet scanning, object copying, and termination) for that worker. During RSet scanning, stack allocate DirtyCardToOopClosure objects; allocating these in a resource area was causing abnormally high GC Worker Other times while the worker thread freed ResourceArea chunks.

Reviewed-by: tonyp, jwilhelm, brutisso
2011-10-23 23:06:06 -07:00
Bengt Rutisson
8fb3eec82e 7097516: G1: assert(0<= from_card && from_card<HeapRegion::CardsPerRegion) failed: Must be in range
Introduced a version of is_in_reserved() that looks at _orig_end as opposed to _end.

Reviewed-by: tonyp, stefank
2011-10-20 10:21:35 +02:00
John Cuthbertson
6513930e7a 7095194: G1: HeapRegion::GrainBytes, GrainWords, and CardsPerRegion should be size_t
Declare GrainBytes, GrainWords, and CardsPerRegion as size_t.

Reviewed-by: jcoomes, tonyp, jmasa
2011-10-05 08:44:10 -07:00
Antonios Printezis
55c503aea2 7075646: G1: fix inconsistencies in the monitoring data
Fixed a few inconsistencies in the monitoring data, in particular when reported from jstat.

Reviewed-by: jmasa, brutisso, johnc
2011-09-23 16:07:49 -04:00
John Cuthbertson
1b62d10b4b 6484982: G1: process references during evacuation pauses
G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.

Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp
2011-09-22 10:57:37 -07:00
Antonios Printezis
f482091133 7039627: G1: avoid BOT updates for survivor allocations and dirty survivor regions incrementally
Refactor the allocation code during GC to use the G1AllocRegion abstraction. Use separate subclasses of G1AllocRegion for survivor and old regions. Avoid BOT updates and dirty survivor cards incrementally for the former.

Reviewed-by: brutisso, johnc, ysr
2011-08-12 11:31:06 -04:00
John Cuthbertson
b94d0b830c 7004681: G1: Extend marking verification to Full GCs
Perform a heap verification after the first phase of G1's full GC using objects' mark words to determine liveness. The third parameter of the heap verification routines, which was used in G1 to determine which marking bitmap to use in liveness calculations, has been changed from a boolean to an enum with values defined for using the mark word, and the 'prev' and 'next' bitmaps.

Reviewed-by: tonyp, ysr
2011-06-14 11:01:10 -07:00
Antonios Printezis
9332c44d84 7045330: G1: Simplify/fix the HeapRegionSeq class
7042285: G1: native memory leak during humongous object allocation
6804436: G1: heap region indices should be size_t

A series of fixes and improvements to the HeapRegionSeq class: a) replace the _regions growable array with a standard C array, b) avoid de-allocating / re-allocating HeapRegion instances when the heap shrinks / grows (fix for 7042285), c) introduce fast method to map address to HeapRegion via a "biased" array pointer, d) embed the _hrs object in G1CollectedHeap, instead of pointing to it via an indirection, e) assume that all the regions added to the HeapRegionSeq instance are contiguous, f) replace int's with size_t's for indexes (and expand that to HeapRegion as part of 6804436), g) remove unnecessary / unused methods, h) rename a couple of fields (_alloc_search_start and _seq_bottom), i) fix iterate_from() not to always start from index 0 irrespective of the region passed to it, j) add a verification method to check the HeapRegionSeq assumptions, k) always call the wrappers for _hrs.iterate(), _hrs_length(), and _hrs.at() from G1CollectedHeap, not those methods directly, and l) unify the code that expands the sequence (by either re-using or creating a new HeapRegion) and make it robust wrt to a HeapRegion allocation failing.

Reviewed-by: stefank, johnc, brutisso
2011-06-10 13:16:40 -04:00