< prev index next >
src/share/vm/gc/g1/g1RemSet.hpp
Print this page
rev 10750 : [mq]: 8153503-cleanup-remset-iteration
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -41,18 +41,20 @@
class ConcurrentG1Refine;
class CodeBlobClosure;
class G1CollectedHeap;
class G1CollectorPolicy;
class G1ParPushHeapRSClosure;
+class G1RemSetScanState;
class G1SATBCardTableModRefBS;
class HeapRegionClaimer;
// A G1RemSet in which each heap region has a rem set that records the
// external heap references into it. Uses a mod ref bs to track updates,
// so that they can be used to update the individual region remsets.
class G1RemSet: public CHeapObj<mtGC> {
private:
+ G1RemSetScanState* _scan_state;
G1CardLiveData _card_live_data;
G1RemSetSummary _prev_period_summary;
// A DirtyCardQueueSet that is used to hold cards that contain
@@ -70,14 +72,10 @@
CardTableModRefBS* _ct_bs;
G1CollectorPolicy* _g1p;
ConcurrentG1Refine* _cg1r;
- // Used for caching the closure that is responsible for scanning
- // references into the collection set.
- G1ParPushHeapRSClosure** _cset_rs_update_cl;
-
public:
// Gives an approximation on how many threads can be expected to add records to
// a remembered set in parallel. This can be used for sizing data structures to
// decrease performance losses due to data structure sharing.
// Examples for quantities that influence this value are the maximum number of
@@ -93,13 +91,13 @@
void cleanupHRRS();
G1RemSet(G1CollectedHeap* g1, CardTableModRefBS* ct_bs);
~G1RemSet();
- // Invoke "blk->do_oop" on all pointers into the collection set
+ // Invoke "cl->do_oop" on all pointers into the collection set
// from objects in regions outside the collection set (having
- // invoked "blk->set_region" to set the "from" region correctly
+ // invoked "cl->set_region" to set the "from" region correctly
// beforehand.)
//
// Apply non_heap_roots on the oops of the unmarked nmethods
// on the strong code roots list for each region in the
// collection set.
@@ -110,11 +108,11 @@
// the "i" passed to the calling thread's work(i) function.
// In the sequential case this param will be ignored.
//
// Returns the number of cards scanned while looking for pointers
// into the collection set.
- size_t oops_into_collection_set_do(G1ParPushHeapRSClosure* blk,
+ size_t oops_into_collection_set_do(G1ParPushHeapRSClosure* cl,
CodeBlobClosure* heap_region_codeblobs,
uint worker_i);
// Prepare for and cleanup after an oops_into_collection_set_do
// call. Must call each of these once before and after (in sequential
@@ -122,17 +120,19 @@
// opportunity to sequential setup and teardown of structures needed by a
// parallel iteration over the CS's RS.)
void prepare_for_oops_into_collection_set_do();
void cleanup_after_oops_into_collection_set_do();
- size_t scanRS(G1ParPushHeapRSClosure* oc,
+ size_t scan_rem_set(G1ParPushHeapRSClosure* oops_in_heap_closure,
CodeBlobClosure* heap_region_codeblobs,
uint worker_i);
- void updateRS(DirtyCardQueue* into_cset_dcq, uint worker_i);
+ G1RemSetScanState* scan_state() const { return _scan_state; }
- CardTableModRefBS* ct_bs() { return _ct_bs; }
+ // Flush remaining refinement buffers into the remembered set,
+ // applying oops_in_heap_closure on the references that point into the heap.
+ void update_rem_set(DirtyCardQueue* into_cset_dcq, G1ParPushHeapRSClosure* oops_in_heap_closure, uint worker_i);
// Record, if necessary, the fact that *p (where "p" is in region "from",
// which is required to be non-NULL) has changed to a new non-NULL value.
template <class T> void par_write_ref(HeapRegion* from, T* p, uint tid);
@@ -143,16 +143,16 @@
// parallel thread id of the current thread, and "hrclaimer" is the
// HeapRegionClaimer that should be used.
void scrub(uint worker_num, HeapRegionClaimer* hrclaimer);
// Refine the card corresponding to "card_ptr".
- // If check_for_refs_into_cset is true, a true result is returned
+ // If oops_in_heap_closure is not NULL, a true result is returned
// if the given card contains oops that have references into the
// current collection set.
virtual bool refine_card(jbyte* card_ptr,
uint worker_i,
- bool check_for_refs_into_cset);
+ G1ParPushHeapRSClosure* oops_in_heap_closure);
// Print accumulated summary info from the start of the VM.
virtual void print_summary_info();
// Print accumulated summary info from the last time called.
@@ -177,43 +177,43 @@
#ifdef ASSERT
void verify_card_live_data_is_clear();
#endif
};
-class ScanRSClosure : public HeapRegionClosure {
- size_t _cards_done, _cards;
+class G1ScanRSClosure : public HeapRegionClosure {
+ G1RemSetScanState* _scan_state;
+
+ size_t _cards_done;
+ size_t _cards;
G1CollectedHeap* _g1h;
- G1ParPushHeapRSClosure* _oc;
+ G1ParPushHeapRSClosure* _push_heap_cl;
CodeBlobClosure* _code_root_cl;
G1BlockOffsetTable* _bot;
G1SATBCardTableModRefBS *_ct_bs;
double _strong_code_root_scan_time_sec;
uint _worker_i;
size_t _block_size;
- bool _try_claimed;
+ void scan_card(size_t index, HeapRegion *r);
+ void scan_strong_code_roots(HeapRegion* r);
public:
- ScanRSClosure(G1ParPushHeapRSClosure* oc,
+ G1ScanRSClosure(G1RemSetScanState* scan_state,
+ G1ParPushHeapRSClosure* push_heap_cl,
CodeBlobClosure* code_root_cl,
uint worker_i);
bool doHeapRegion(HeapRegion* r);
double strong_code_root_scan_time_sec() {
return _strong_code_root_scan_time_sec;
}
+
size_t cards_done() { return _cards_done;}
size_t cards_looked_up() { return _cards;}
- void set_try_claimed() { _try_claimed = true; }
-private:
- void scanCard(size_t index, HeapRegion *r);
- void printCard(HeapRegion* card_region, size_t card_index,
- HeapWord* card_start);
- void scan_strong_code_roots(HeapRegion* r);
};
class UpdateRSOopClosure: public ExtendedOopClosure {
HeapRegion* _from;
G1RemSet* _rs;
< prev index next >