mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-16 00:54:38 +02:00
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:
parent
36eee7c8c8
commit
5c58d27aac
853 changed files with 26124 additions and 82956 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue