--- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Fri Aug 31 16:39:35 2012 -0700
+++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp Sat Sep 01 13:25:18 2012 -0400
@@ -41,7 +41,7 @@
// ConcurrentMarkSweepGeneration is in support of a concurrent
// mark-sweep old generation in the Detlefs-Printezis--Boehm-Demers-Schenker
// style. We assume, for now, that this generation is always the
-// seniormost generation (modulo the PermGeneration), and for simplicity
+// seniormost generation and for simplicity
// in the first implementation, that this generation is a single compactible
// space. Neither of these restrictions appears essential, and will be
// relaxed in the future when more time is available to implement the
@@ -610,7 +610,6 @@
protected:
ConcurrentMarkSweepGeneration* _cmsGen; // old gen (CMS)
- ConcurrentMarkSweepGeneration* _permGen; // perm gen
MemRegion _span; // span covering above two
CardTableRS* _ct; // card table
@@ -618,9 +617,6 @@
CMSBitMap _markBitMap;
CMSBitMap _modUnionTable;
CMSMarkStack _markStack;
- CMSMarkStack _revisitStack; // used to keep track of klassKlass objects
- // to revisit
- CMSBitMap _perm_gen_verify_bit_map; // Mark bit map for perm gen verification support.
HeapWord* _restart_addr; // in support of marking stack overflow
void lower_restart_addr(HeapWord* low);
@@ -783,6 +779,7 @@
// Does precleaning work, returning a quantity indicative of
// the amount of "useful work" done.
size_t preclean_work(bool clean_refs, bool clean_survivors);
+ void preclean_klasses(MarkRefsIntoAndScanClosure* cl, Mutex* freelistLock);
void abortable_preclean(); // Preclean while looking for possible abort
void initialize_sequential_subtasks_for_young_gen_rescan(int i);
// Helper function for above; merge-sorts the per-thread plab samples
@@ -855,7 +852,6 @@
void setup_cms_unloading_and_verification_state();
public:
CMSCollector(ConcurrentMarkSweepGeneration* cmsGen,
- ConcurrentMarkSweepGeneration* permGen,
CardTableRS* ct,
ConcurrentMarkSweepPolicy* cp);
ConcurrentMarkSweepThread* cmsThread() { return _cmsThread; }
@@ -891,7 +887,7 @@
bool should_unload_classes() const {
return _should_unload_classes;
}
- bool update_should_unload_classes();
+ void update_should_unload_classes();
void direct_allocated(HeapWord* start, size_t size);
@@ -1002,9 +998,6 @@
CMSMarkStack* verification_mark_stack() { return &_markStack; }
CMSBitMap* verification_mark_bm() { return &_verification_mark_bm; }
- // Get the bit map with a perm gen "deadness" information.
- CMSBitMap* perm_gen_verify_bit_map() { return &_perm_gen_verify_bit_map; }
-
// Initialization errors
bool completed_initialization() { return _completed_initialization; }
};
@@ -1253,8 +1246,8 @@
void save_sweep_limit();
// More iteration support
- virtual void oop_iterate(MemRegion mr, OopClosure* cl);
- virtual void oop_iterate(OopClosure* cl);
+ virtual void oop_iterate(MemRegion mr, ExtendedOopClosure* cl);
+ virtual void oop_iterate(ExtendedOopClosure* cl);
virtual void safe_object_iterate(ObjectClosure* cl);
virtual void object_iterate(ObjectClosure* cl);
@@ -1273,8 +1266,6 @@
// the space.
FreeChunk* find_chunk_at_end();
- // Overriding of unused functionality (sharing not yet supported with CMS)
- void pre_adjust_pointers();
void post_compact();
// Debugging
@@ -1359,7 +1350,6 @@
CMSBitMap* _bitMap;
CMSBitMap* _mut;
CMSMarkStack* _markStack;
- CMSMarkStack* _revisitStack;
bool _yield;
int _skipBits;
HeapWord* _finger;
@@ -1370,7 +1360,6 @@
MarkFromRootsClosure(CMSCollector* collector, MemRegion span,
CMSBitMap* bitMap,
CMSMarkStack* markStack,
- CMSMarkStack* revisitStack,
bool should_yield, bool verifying = false);
bool do_bit(size_t offset);
void reset(HeapWord* addr);
@@ -1394,7 +1383,6 @@
CMSBitMap* _mut;
OopTaskQueue* _work_queue;
CMSMarkStack* _overflow_stack;
- CMSMarkStack* _revisit_stack;
bool _yield;
int _skip_bits;
HeapWord* _finger;
@@ -1406,7 +1394,6 @@
CMSBitMap* bit_map,
OopTaskQueue* work_queue,
CMSMarkStack* overflow_stack,
- CMSMarkStack* revisit_stack,
bool should_yield);
bool do_bit(size_t offset);
inline void do_yield_check();
@@ -1419,7 +1406,7 @@
// The following closures are used to do certain kinds of verification of
// CMS marking.
-class PushAndMarkVerifyClosure: public OopClosure {
+class PushAndMarkVerifyClosure: public CMSOopClosure {
CMSCollector* _collector;
MemRegion _span;
CMSBitMap* _verification_bm;
@@ -1428,7 +1415,7 @@
protected:
void do_oop(oop p);
template <class T> inline void do_oop_work(T *p) {
- oop obj = oopDesc::load_decode_heap_oop_not_null(p);
+ oop obj = oopDesc::load_decode_heap_oop(p);
do_oop(obj);
}
public:
@@ -1439,6 +1426,7 @@
CMSMarkStack* mark_stack);
void do_oop(oop* p);
void do_oop(narrowOop* p);
+
// Deal with a stack overflow condition
void handle_stack_overflow(HeapWord* lost);
};
@@ -1504,7 +1492,6 @@
ReferenceProcessor* rp,
CMSBitMap* bit_map,
CMSMarkStack* mark_stack,
- CMSMarkStack* revisit_stack,
MarkRefsIntoAndScanClosure* cl):
#ifdef ASSERT
_collector(collector),
@@ -1520,7 +1507,6 @@
ReferenceProcessor* rp,
CMSBitMap* bit_map,
OopTaskQueue* work_queue,
- CMSMarkStack* revisit_stack,
Par_MarkRefsIntoAndScanClosure* cl):
#ifdef ASSERT
_collector(collector),
@@ -1558,24 +1544,22 @@
CompactibleFreeListSpace* space,
CMSBitMap* bit_map,
CMSMarkStack* mark_stack,
- CMSMarkStack* revisit_stack,
MarkRefsIntoAndScanClosure* cl):
_space(space),
_num_dirty_cards(0),
_scan_cl(collector, span, collector->ref_processor(), bit_map,
- mark_stack, revisit_stack, cl) { }
+ mark_stack, cl) { }
MarkFromDirtyCardsClosure(CMSCollector* collector,
MemRegion span,
CompactibleFreeListSpace* space,
CMSBitMap* bit_map,
OopTaskQueue* work_queue,
- CMSMarkStack* revisit_stack,
Par_MarkRefsIntoAndScanClosure* cl):
_space(space),
_num_dirty_cards(0),
_scan_cl(collector, span, collector->ref_processor(), bit_map,
- work_queue, revisit_stack, cl) { }
+ work_queue, cl) { }
void do_MemRegion(MemRegion mr);
void set_space(CompactibleFreeListSpace* space) { _space = space; }
@@ -1609,7 +1593,6 @@
MemRegion span,
CMSBitMap* bitMap,
CMSMarkStack* markStack,
- CMSMarkStack* revisitStack,
MarkRefsIntoAndScanClosure* cl,
bool should_yield):
_collector(collector),
@@ -1838,13 +1821,12 @@
public:
CMSParDrainMarkingStackClosure(CMSCollector* collector,
MemRegion span, CMSBitMap* bit_map,
- CMSMarkStack* revisit_stack,
OopTaskQueue* work_queue):
_collector(collector),
_span(span),
_bit_map(bit_map),
_work_queue(work_queue),
- _mark_and_push(collector, span, bit_map, revisit_stack, work_queue) { }
+ _mark_and_push(collector, span, bit_map, work_queue) { }
public:
void trim_queue(uint max);