diff src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents d2a62e0f25eb
children f64ffbf81af5
line wrap: on
line diff
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp	Fri Aug 31 16:39:35 2012 -0700
+++ b/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);