mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-16 00:54:38 +02:00
8064702: Remove the CMS foreground collector
Reviewed-by: kbarrett, ysr
This commit is contained in:
parent
2616e09389
commit
4b60638d85
9 changed files with 160 additions and 715 deletions
|
@ -608,7 +608,6 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
GCHeapSummary _last_heap_summary;
|
||||
MetaspaceSummary _last_metaspace_summary;
|
||||
|
||||
void register_foreground_gc_start(GCCause::Cause cause);
|
||||
void register_gc_start(GCCause::Cause cause);
|
||||
void register_gc_end();
|
||||
void save_heap_summary();
|
||||
|
@ -695,8 +694,6 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
int _numYields;
|
||||
size_t _numDirtyCards;
|
||||
size_t _sweep_count;
|
||||
// Number of full gc's since the last concurrent gc.
|
||||
uint _full_gcs_since_conc_gc;
|
||||
|
||||
// Occupancy used for bootstrapping stats
|
||||
double _bootstrap_occupancy;
|
||||
|
@ -760,14 +757,14 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
NOT_PRODUCT(bool par_simulate_overflow();) // MT version
|
||||
|
||||
// CMS work methods
|
||||
void checkpointRootsInitialWork(bool asynch); // Initial checkpoint work
|
||||
void checkpointRootsInitialWork(); // Initial checkpoint work
|
||||
|
||||
// A return value of false indicates failure due to stack overflow
|
||||
bool markFromRootsWork(bool asynch); // Concurrent marking work
|
||||
bool markFromRootsWork(); // Concurrent marking work
|
||||
|
||||
public: // FIX ME!!! only for testing
|
||||
bool do_marking_st(bool asynch); // Single-threaded marking
|
||||
bool do_marking_mt(bool asynch); // Multi-threaded marking
|
||||
bool do_marking_st(); // Single-threaded marking
|
||||
bool do_marking_mt(); // Multi-threaded marking
|
||||
|
||||
private:
|
||||
|
||||
|
@ -788,20 +785,19 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
void reset_survivor_plab_arrays();
|
||||
|
||||
// Final (second) checkpoint work
|
||||
void checkpointRootsFinalWork(bool asynch, bool clear_all_soft_refs,
|
||||
bool init_mark_was_synchronous);
|
||||
void checkpointRootsFinalWork();
|
||||
// Work routine for parallel version of remark
|
||||
void do_remark_parallel();
|
||||
// Work routine for non-parallel version of remark
|
||||
void do_remark_non_parallel();
|
||||
// Reference processing work routine (during second checkpoint)
|
||||
void refProcessingWork(bool asynch, bool clear_all_soft_refs);
|
||||
void refProcessingWork();
|
||||
|
||||
// Concurrent sweeping work
|
||||
void sweepWork(ConcurrentMarkSweepGeneration* gen, bool asynch);
|
||||
void sweepWork(ConcurrentMarkSweepGeneration* gen);
|
||||
|
||||
// (Concurrent) resetting of support data structures
|
||||
void reset(bool asynch);
|
||||
void reset(bool concurrent);
|
||||
|
||||
// Clear _expansion_cause fields of constituent generations
|
||||
void clear_expansion_cause();
|
||||
|
@ -810,22 +806,10 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
// used regions of each generation to limit the extent of sweep
|
||||
void save_sweep_limits();
|
||||
|
||||
// A work method used by foreground collection to determine
|
||||
// what type of collection (compacting or not, continuing or fresh)
|
||||
// it should do.
|
||||
void decide_foreground_collection_type(bool clear_all_soft_refs,
|
||||
bool* should_compact, bool* should_start_over);
|
||||
|
||||
// A work method used by the foreground collector to do
|
||||
// a mark-sweep-compact.
|
||||
void do_compaction_work(bool clear_all_soft_refs);
|
||||
|
||||
// A work method used by the foreground collector to do
|
||||
// a mark-sweep, after taking over from a possibly on-going
|
||||
// concurrent mark-sweep collection.
|
||||
void do_mark_sweep_work(bool clear_all_soft_refs,
|
||||
CollectorState first_state, bool should_start_over);
|
||||
|
||||
// Work methods for reporting concurrent mode interruption or failure
|
||||
bool is_external_interruption();
|
||||
void report_concurrent_mode_interruption();
|
||||
|
@ -868,15 +852,13 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
// Locking checks
|
||||
NOT_PRODUCT(static bool have_cms_token();)
|
||||
|
||||
// XXXPERM bool should_collect(bool full, size_t size, bool tlab);
|
||||
bool shouldConcurrentCollect();
|
||||
|
||||
void collect(bool full,
|
||||
bool clear_all_soft_refs,
|
||||
size_t size,
|
||||
bool tlab);
|
||||
void collect_in_background(bool clear_all_soft_refs, GCCause::Cause cause);
|
||||
void collect_in_foreground(bool clear_all_soft_refs, GCCause::Cause cause);
|
||||
void collect_in_background(GCCause::Cause cause);
|
||||
|
||||
// In support of ExplicitGCInvokesConcurrent
|
||||
static void request_full_gc(unsigned int full_gc_count, GCCause::Cause cause);
|
||||
|
@ -928,18 +910,16 @@ class CMSCollector: public CHeapObj<mtGC> {
|
|||
void directAllocated(HeapWord* start, size_t size);
|
||||
|
||||
// Main CMS steps and related support
|
||||
void checkpointRootsInitial(bool asynch);
|
||||
bool markFromRoots(bool asynch); // a return value of false indicates failure
|
||||
// due to stack overflow
|
||||
void checkpointRootsInitial();
|
||||
bool markFromRoots(); // a return value of false indicates failure
|
||||
// due to stack overflow
|
||||
void preclean();
|
||||
void checkpointRootsFinal(bool asynch, bool clear_all_soft_refs,
|
||||
bool init_mark_was_synchronous);
|
||||
void sweep(bool asynch);
|
||||
void checkpointRootsFinal();
|
||||
void sweep();
|
||||
|
||||
// Check that the currently executing thread is the expected
|
||||
// one (foreground collector or background collector).
|
||||
static void check_correct_thread_executing() PRODUCT_RETURN;
|
||||
// XXXPERM void print_statistics() PRODUCT_RETURN;
|
||||
|
||||
bool is_cms_reachable(HeapWord* addr);
|
||||
|
||||
|
@ -1060,14 +1040,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
|
|||
// In support of MinChunkSize being larger than min object size
|
||||
const double _dilatation_factor;
|
||||
|
||||
enum CollectionTypes {
|
||||
Concurrent_collection_type = 0,
|
||||
MS_foreground_collection_type = 1,
|
||||
MSC_foreground_collection_type = 2,
|
||||
Unknown_collection_type = 3
|
||||
};
|
||||
|
||||
CollectionTypes _debug_collection_type;
|
||||
bool _debug_concurrent_cycle;
|
||||
|
||||
// True if a compacting collection was done.
|
||||
bool _did_compact;
|
||||
|
@ -1152,7 +1125,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
|
|||
// hack to allow the collection of the younger gen first if the flag is
|
||||
// set.
|
||||
virtual bool full_collects_younger_generations() const {
|
||||
return UseCMSCompactAtFullCollection && !ScavengeBeforeFullGC;
|
||||
return !ScavengeBeforeFullGC;
|
||||
}
|
||||
|
||||
void space_iterate(SpaceClosure* blk, bool usedOnly = false);
|
||||
|
@ -1296,7 +1269,7 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
|
|||
// collection.
|
||||
void compute_new_size_free_list();
|
||||
|
||||
CollectionTypes debug_collection_type() { return _debug_collection_type; }
|
||||
bool debug_concurrent_cycle() { return _debug_concurrent_cycle; }
|
||||
void rotate_debug_collection_type();
|
||||
};
|
||||
|
||||
|
@ -1344,7 +1317,6 @@ class Par_MarkFromRootsClosure: public BitMapClosure {
|
|||
CMSBitMap* _mut;
|
||||
OopTaskQueue* _work_queue;
|
||||
CMSMarkStack* _overflow_stack;
|
||||
bool _yield;
|
||||
int _skip_bits;
|
||||
HeapWord* _finger;
|
||||
HeapWord* _threshold;
|
||||
|
@ -1354,8 +1326,7 @@ class Par_MarkFromRootsClosure: public BitMapClosure {
|
|||
MemRegion span,
|
||||
CMSBitMap* bit_map,
|
||||
OopTaskQueue* work_queue,
|
||||
CMSMarkStack* overflow_stack,
|
||||
bool should_yield);
|
||||
CMSMarkStack* overflow_stack);
|
||||
bool do_bit(size_t offset);
|
||||
inline void do_yield_check();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue