< prev index next >

./b31893aea883.export

Print this page

        

@@ -121,12 +121,12 @@
  // apply to TLAB allocation, which is not part of this interface: it
  // is done by clients of this interface.)
  
 -// Notes on implementation of parallelism in different tasks.
 -//
--// G1ParVerifyTask uses heap_region_par_iterate() for parallelism.
--// The number of GC workers is passed to heap_region_par_iterate().
+-// G1ParVerifyTask uses heap_region_par_iterate_chunked() for parallelism.
+-// The number of GC workers is passed to heap_region_par_iterate_chunked().
 -// It does use run_task() which sets _n_workers in the task.
 -// G1ParTask executes g1_process_roots() ->
 -// SharedHeap::process_roots() which calls eventually to
 -// CardTableModRefBS::par_non_clean_card_iterate_work() which uses
 -// SequentialSubTasksDone.  SharedHeap::process_roots() also

@@ -334,11 +334,11 @@
 -
 -void
 -G1CollectedHeap::
 -g1_process_roots(OopClosure* scan_non_heap_roots,
 -                 OopClosure* scan_non_heap_weak_roots,
--                 G1ParPushHeapRSClosure* scan_rs,
+-                 OopsInHeapRegionClosure* scan_rs,
 -                 CLDClosure* scan_strong_clds,
 -                 CLDClosure* scan_weak_clds,
 -                 CodeBlobClosure* scan_strong_code,
 -                 uint worker_i) {
 -

@@ -457,11 +457,11 @@
 -  // param is for use with parallel roots processing, and should be
 -  // the "i" of the calling parallel worker thread's work(i) function.
 -  // In the sequential case this param will be ignored.
 -  void g1_process_roots(OopClosure* scan_non_heap_roots,
 -                        OopClosure* scan_non_heap_weak_roots,
--                        G1ParPushHeapRSClosure* scan_rs,
+-                        OopsInHeapRegionClosure* scan_rs,
 -                        CLDClosure* scan_strong_clds,
 -                        CLDClosure* scan_weak_clds,
 -                        CodeBlobClosure* scan_strong_code,
 -                        uint worker_i);
 -

@@ -601,16 +601,17 @@
    if (G1StringDedup::is_enabled()) {
      G1StringDedup::oops_do(&GenMarkSweep::adjust_pointer_closure);
 diff --git a/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/src/share/vm/gc_implementation/g1/g1RemSet.cpp
 --- a/src/share/vm/gc_implementation/g1/g1RemSet.cpp
 +++ b/src/share/vm/gc_implementation/g1/g1RemSet.cpp
-@@ -79,7 +79,6 @@
+@@ -79,8 +79,7 @@
      _cards_scanned(NULL), _total_cards_scanned(0),
      _prev_period_summary()
  {
 -  _seq_task = new SubTasksDone(NumSeqTasks);
-   _cset_rs_update_cl = NEW_C_HEAP_ARRAY(G1ParPushHeapRSClosure*, n_workers(), mtGC);
+   guarantee(n_workers() > 0, "There should be some workers");
+   _cset_rs_update_cl = NEW_C_HEAP_ARRAY(OopsInHeapRegionClosure*, n_workers(), mtGC);
    for (uint i = 0; i < n_workers(); i++) {
      _cset_rs_update_cl[i] = NULL;
 @@ -90,7 +89,6 @@
  }
  

@@ -659,11 +660,11 @@
 + *
 + */
 +
 +#include "precompiled.hpp"
 +
-+#include "classfile/stringTable.hpp"
++#include "classfile/symbolTable.hpp"
 +#include "classfile/systemDictionary.hpp"
 +#include "code/codeCache.hpp"
 +#include "gc_implementation/g1/bufferingOopClosure.hpp"
 +#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
 +#include "gc_implementation/g1/g1CollectorPolicy.hpp"

@@ -752,11 +753,11 @@
 +
 +G1RootProcessor::G1RootProcessor(G1CollectedHeap* g1h) :
 +    _g1h(g1h),
 +    _process_strong_tasks(new SubTasksDone(G1RP_PS_NumElements)),
 +    _srs(g1h),
-+    _lock(Mutex::leaf, "G1 Root Scanning barrier lock", false, Monitor::_safepoint_check_never),
++    _lock(Mutex::leaf, "G1 Root Scanning barrier lock", false),
 +    _n_workers_discovered_strong_classes(0) {}
 +
 +void G1RootProcessor::evacuate_roots(OopClosure* scan_non_heap_roots,
 +                                     OopClosure* scan_non_heap_weak_roots,
 +                                     CLDClosure* scan_strong_clds,

@@ -1271,13 +1272,14 @@
 +                &mark_code_closure);
  
    if (younger_gens_as_roots) {
 -    if (!_gen_process_roots_tasks->is_task_claimed(GCH_PS_younger_gens)) {
 +    if (!_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) {
-       if (level == 1) {
-         not_older_gens->set_generation(_young_gen);
-         _young_gen->oop_iterate(not_older_gens);
+       for (int i = 0; i < level; i++) {
+         not_older_gens->set_generation(_gens[i]);
+         _gens[i]->oop_iterate(not_older_gens);
+
 @@ -607,43 +721,18 @@
      older_gens->reset_generation();
    }
  
 -  _gen_process_roots_tasks->all_tasks_completed();

@@ -1322,13 +1324,14 @@
  
  void GenCollectedHeap::gen_process_weak_roots(OopClosure* root_closure) {
 -  SharedHeap::process_weak_roots(root_closure);
 -  // "Local" "weak" refs
 +  JNIHandles::weak_oops_do(&always_true, root_closure);
-   _young_gen->ref_processor()->weak_oops_do(root_closure);
-   _old_gen->ref_processor()->weak_oops_do(root_closure);
+   for (int i = 0; i < _n_gens; i++) {
+     _gens[i]->ref_processor()->weak_oops_do(root_closure);
  }
+
 diff --git a/src/share/vm/memory/genCollectedHeap.hpp b/src/share/vm/memory/genCollectedHeap.hpp
 --- a/src/share/vm/memory/genCollectedHeap.hpp
 +++ b/src/share/vm/memory/genCollectedHeap.hpp
 @@ -85,8 +85,7 @@
  

@@ -1414,11 +1417,11 @@
  #include "runtime/java.hpp"
 -#include "services/management.hpp"
  #include "utilities/copy.hpp"
  #include "utilities/workgroup.hpp"
  
-@@ -40,32 +39,12 @@
+@@ -40,33 +39,13 @@
  
  SharedHeap* SharedHeap::_sh;
  
 -// The set of potentially parallel tasks in root scanning.
 -enum SH_process_roots_tasks {

@@ -1436,21 +1439,22 @@
 -};
 -
  SharedHeap::SharedHeap(CollectorPolicy* policy_) :
    CollectedHeap(),
    _collector_policy(policy_),
+   _rem_set(NULL),
 -  _strong_roots_scope(NULL),
    _strong_roots_parity(0),
 -  _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)),
    _workers(NULL)
  {
 -  if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) {
 -    vm_exit_during_initialization("Failed necessary allocation.");
 -  }
    _sh = this;  // ch is static, should be set only once.
-   if (UseConcMarkSweepGC || UseG1GC) {
-     _workers = new FlexibleWorkGang("GC Thread", ParallelGCThreads,
+   if ((UseParNewGC ||
+       (UseConcMarkSweepGC && (CMSParallelInitialMarkEnabled ||
 @@ -79,14 +58,6 @@
    }
  }
  
 -int SharedHeap::n_termination() {

@@ -1515,11 +1519,11 @@
 -  if (_active) {
 -    _sh->unregister_strong_roots_scope(this);
 -  }
 -}
 -
--Monitor* SharedHeap::StrongRootsScope::_lock = new Monitor(Mutex::leaf, "StrongRootsScope lock", false, Monitor::_safepoint_check_never);
+-Monitor* SharedHeap::StrongRootsScope::_lock = new Monitor(Mutex::leaf, "StrongRootsScope lock", false);
 -
 -void SharedHeap::StrongRootsScope::mark_worker_done_with_threads(uint n_workers) {
 -  // The Thread work barrier is only needed by G1 Class Unloading.
 -  // No need to use the barrier if this is single-threaded code.
 -  if (UseG1GC && ClassUnloadingWithConcurrentMark && n_workers > 0) {
< prev index next >