< prev index next >

src/share/vm/memory/sharedHeap.cpp

Print this page




  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/stringTable.hpp"
  27 #include "classfile/systemDictionary.hpp"
  28 #include "code/codeCache.hpp"
  29 #include "gc_interface/collectedHeap.inline.hpp"
  30 #include "memory/sharedHeap.hpp"
  31 #include "oops/oop.inline.hpp"
  32 #include "runtime/atomic.inline.hpp"
  33 #include "runtime/fprofiler.hpp"
  34 #include "runtime/java.hpp"
  35 #include "utilities/copy.hpp"
  36 #include "utilities/workgroup.hpp"
  37 
  38 SharedHeap* SharedHeap::_sh;
  39 
  40 SharedHeap::SharedHeap() :
  41   CollectedHeap(),
  42   _workers(NULL)
  43 {
  44   _sh = this;  // ch is static, should be set only once.
  45   if (UseConcMarkSweepGC || UseG1GC) {
  46     _workers = new FlexibleWorkGang("GC Thread", ParallelGCThreads,
  47                             /* are_GC_task_threads */true,
  48                             /* are_ConcurrentGC_threads */false);
  49     if (_workers == NULL) {
  50       vm_exit_during_initialization("Failed necessary allocation.");
  51     } else {
  52       _workers->initialize_workers();
  53     }
  54   }
  55 }
  56 
  57 bool SharedHeap::heap_lock_held_for_gc() {
  58   Thread* t = Thread::current();
  59   return    Heap_lock->owned_by_self()
  60          || (   (t->is_GC_task_thread() ||  t->is_VM_thread())
  61              && _thread_holds_heap_lock_for_gc);
  62 }
  63 
  64 void SharedHeap::set_par_threads(uint t) {
  65   assert(t == 0 || !UseSerialGC, "Cannot have parallel threads");
  66   _n_par_threads = t;
  67 }
  68 
  69 SharedHeap::StrongRootsScope::StrongRootsScope(SharedHeap* heap, bool activate)
  70   : MarkScope(activate), _sh(heap)
  71 {
  72   if (_active) {
  73     Threads::change_thread_claim_parity();
  74     // Zero the claimed high water mark in the StringTable
  75     StringTable::clear_parallel_claimed_index();
  76   }
  77 }
  78 
  79 SharedHeap::StrongRootsScope::~StrongRootsScope() {
  80   Threads::assert_all_threads_claimed();
  81 }


  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "precompiled.hpp"
  26 #include "classfile/stringTable.hpp"
  27 #include "classfile/systemDictionary.hpp"
  28 #include "code/codeCache.hpp"
  29 #include "gc_interface/collectedHeap.inline.hpp"
  30 #include "memory/sharedHeap.hpp"
  31 #include "oops/oop.inline.hpp"
  32 #include "runtime/atomic.inline.hpp"
  33 #include "runtime/fprofiler.hpp"
  34 #include "runtime/java.hpp"
  35 #include "utilities/copy.hpp"
  36 #include "utilities/workgroup.hpp"
  37 


  38 SharedHeap::SharedHeap() :
  39   CollectedHeap(),
  40   _workers(NULL)
  41 {

  42   if (UseConcMarkSweepGC || UseG1GC) {
  43     _workers = new FlexibleWorkGang("GC Thread", ParallelGCThreads,
  44                             /* are_GC_task_threads */true,
  45                             /* are_ConcurrentGC_threads */false);
  46     if (_workers == NULL) {
  47       vm_exit_during_initialization("Failed necessary allocation.");
  48     } else {
  49       _workers->initialize_workers();
  50     }
  51   }







  52 }
  53 
  54 void SharedHeap::set_par_threads(uint t) {
  55   assert(t == 0 || !UseSerialGC, "Cannot have parallel threads");
  56   _n_par_threads = t;
  57 }
  58 
  59 SharedHeap::StrongRootsScope::StrongRootsScope(SharedHeap* heap, bool activate)
  60   : MarkScope(activate), _sh(heap)
  61 {
  62   if (_active) {
  63     Threads::change_thread_claim_parity();
  64     // Zero the claimed high water mark in the StringTable
  65     StringTable::clear_parallel_claimed_index();
  66   }
  67 }
  68 
  69 SharedHeap::StrongRootsScope::~StrongRootsScope() {
  70   Threads::assert_all_threads_claimed();
  71 }
< prev index next >