Mercurial > hg > truffle
diff src/share/vm/gc_implementation/g1/collectionSetChooser.hpp @ 3989:b9390528617c
7095236: G1: _markedRegions never contains NULL regions
Summary: Removed the code for skipping over NULL regions in _markedRegions, replacing it with an assertion that a NULL region is never encountered; removed dead methods, remove() and remove_region(), and inlined a simplified addRegion() directly into fillCache().
Reviewed-by: brutisso, tonyp
author | ysr |
---|---|
date | Thu, 06 Oct 2011 18:56:47 -0700 |
parents | 371bbc844bf1 |
children | a9647476d1a4 |
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp Thu Oct 06 13:28:09 2011 -0400 +++ b/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp Thu Oct 06 18:56:47 2011 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,26 @@ #include "utilities/growableArray.hpp" // We need to sort heap regions by collection desirability. +// This sorting is currently done in two "stages". An initial sort is +// done following a cleanup pause as soon as all of the marked but +// non-empty regions have been identified and the completely empty +// ones reclaimed. +// This gives us a global sort on a GC efficiency metric +// based on predictive data available at that time. However, +// any of these regions that are collected will only be collected +// during a future GC pause, by which time it is possible that newer +// data might allow us to revise and/or refine the earlier +// pause predictions, leading to changes in expected gc efficiency +// order. To somewhat mitigate this obsolescence, more so in the +// case of regions towards the end of the list, which will be +// picked later, these pre-sorted regions from the _markedRegions +// array are not used as is, but a small prefix thereof is +// insertion-sorted again into a small cache, based on more +// recent remembered set information. Regions are then drawn +// from this cache to construct the collection set at each +// incremental GC. +// This scheme and/or its implementation may be subject to +// revision in the future. class CSetChooserCache VALUE_OBJ_CLASS_SPEC { private: @@ -37,8 +57,8 @@ } PrivateConstants; HeapRegion* _cache[CacheLength]; - int _occupancy; // number of region in cache - int _first; // "first" region in the cache + int _occupancy; // number of regions in cache + int _first; // (index of) "first" region in the cache // adding CacheLength to deal with negative values inline int trim_index(int index) { @@ -62,7 +82,6 @@ void clear(void); void insert(HeapRegion *hr); HeapRegion *remove_first(void); - void remove (HeapRegion *hr); inline HeapRegion *get_first(void) { return _cache[_first]; } @@ -102,7 +121,6 @@ void sortMarkedHeapRegions(); void fillCache(); - bool addRegionToCache(void); void addMarkedHeapRegion(HeapRegion *hr); // Must be called before calls to getParMarkedHeapRegionChunk. @@ -122,9 +140,6 @@ void updateAfterFullCollection(); - // Ensure that "hr" is not a member of the marked region array or the cache - void removeRegion(HeapRegion* hr); - bool unmarked_age_1_returned_as_new() { return _unmarked_age_1_returned_as_new; } // Returns true if the used portion of "_markedRegions" is properly