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
This commit is contained in:
Jon Masamitsu 2012-09-01 13:25:18 -04:00 committed by Coleen Phillimore
parent 36eee7c8c8
commit 5c58d27aac
853 changed files with 26124 additions and 82956 deletions

View file

@ -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 @@ class CMSCollector: public CHeapObj<mtGC> {
protected:
ConcurrentMarkSweepGeneration* _cmsGen; // old gen (CMS)
ConcurrentMarkSweepGeneration* _permGen; // perm gen
MemRegion _span; // span covering above two
CardTableRS* _ct; // card table
@ -618,9 +617,6 @@ class CMSCollector: public CHeapObj<mtGC> {
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 @@ class CMSCollector: public CHeapObj<mtGC> {
// 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 @@ class CMSCollector: public CHeapObj<mtGC> {
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 @@ class CMSCollector: public CHeapObj<mtGC> {
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 @@ class CMSCollector: public CHeapObj<mtGC> {
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 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
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 @@ class ConcurrentMarkSweepGeneration: public CardGeneration {
// 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 @@ class MarkFromRootsClosure: public BitMapClosure {
CMSBitMap* _bitMap;
CMSBitMap* _mut;
CMSMarkStack* _markStack;
CMSMarkStack* _revisitStack;
bool _yield;
int _skipBits;
HeapWord* _finger;
@ -1370,7 +1360,6 @@ class MarkFromRootsClosure: public BitMapClosure {
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 @@ class Par_MarkFromRootsClosure: public BitMapClosure {
CMSBitMap* _mut;
OopTaskQueue* _work_queue;
CMSMarkStack* _overflow_stack;
CMSMarkStack* _revisit_stack;
bool _yield;
int _skip_bits;
HeapWord* _finger;
@ -1406,7 +1394,6 @@ class Par_MarkFromRootsClosure: public BitMapClosure {
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 @@ class Par_MarkFromRootsClosure: public BitMapClosure {
// 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 @@ class PushAndMarkVerifyClosure: public OopClosure {
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 @@ class PushAndMarkVerifyClosure: public OopClosure {
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 @@ class ScanMarkedObjectsAgainClosure: public UpwardsObjectClosure {
ReferenceProcessor* rp,
CMSBitMap* bit_map,
CMSMarkStack* mark_stack,
CMSMarkStack* revisit_stack,
MarkRefsIntoAndScanClosure* cl):
#ifdef ASSERT
_collector(collector),
@ -1520,7 +1507,6 @@ class ScanMarkedObjectsAgainClosure: public UpwardsObjectClosure {
ReferenceProcessor* rp,
CMSBitMap* bit_map,
OopTaskQueue* work_queue,
CMSMarkStack* revisit_stack,
Par_MarkRefsIntoAndScanClosure* cl):
#ifdef ASSERT
_collector(collector),
@ -1558,24 +1544,22 @@ class MarkFromDirtyCardsClosure: public MemRegionClosure {
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 @@ class ScanMarkedObjectsAgainCarefullyClosure: public ObjectClosureCareful {
MemRegion span,
CMSBitMap* bitMap,
CMSMarkStack* markStack,
CMSMarkStack* revisitStack,
MarkRefsIntoAndScanClosure* cl,
bool should_yield):
_collector(collector),
@ -1838,13 +1821,12 @@ class CMSParDrainMarkingStackClosure: public VoidClosure {
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);