< prev index next >

src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp

Print this page
rev 47972 : [mq]: open.patch


  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  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 "code/codeCache.hpp"
  27 #include "gc/parallel/adjoiningGenerations.hpp"
  28 #include "gc/parallel/adjoiningVirtualSpaces.hpp"
  29 #include "gc/parallel/cardTableExtension.hpp"
  30 #include "gc/parallel/gcTaskManager.hpp"
  31 #include "gc/parallel/generationSizer.hpp"
  32 #include "gc/parallel/objectStartArray.inline.hpp"
  33 #include "gc/parallel/parallelScavengeHeap.inline.hpp"
  34 #include "gc/parallel/psAdaptiveSizePolicy.hpp"
  35 #include "gc/parallel/psMarkSweep.hpp"

  36 #include "gc/parallel/psParallelCompact.inline.hpp"
  37 #include "gc/parallel/psPromotionManager.hpp"
  38 #include "gc/parallel/psScavenge.hpp"
  39 #include "gc/parallel/vmPSOperations.hpp"
  40 #include "gc/shared/gcHeapSummary.hpp"
  41 #include "gc/shared/gcLocker.inline.hpp"
  42 #include "gc/shared/gcWhen.hpp"
  43 #include "logging/log.hpp"
  44 #include "oops/oop.inline.hpp"
  45 #include "runtime/handles.inline.hpp"
  46 #include "runtime/java.hpp"
  47 #include "runtime/vmThread.hpp"

  48 #include "services/memTracker.hpp"
  49 #include "utilities/vmError.hpp"
  50 
  51 PSYoungGen*  ParallelScavengeHeap::_young_gen = NULL;
  52 PSOldGen*    ParallelScavengeHeap::_old_gen = NULL;
  53 PSAdaptiveSizePolicy* ParallelScavengeHeap::_size_policy = NULL;
  54 PSGCAdaptivePolicyCounters* ParallelScavengeHeap::_gc_policy_counters = NULL;
  55 GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL;
  56 
  57 jint ParallelScavengeHeap::initialize() {
  58   CollectedHeap::pre_initialize();
  59 
  60   const size_t heap_size = _collector_policy->max_heap_byte_size();
  61 
  62   ReservedSpace heap_rs = Universe::reserve_heap(heap_size, _collector_policy->heap_alignment());
  63 
  64   os::trace_page_sizes("Heap",
  65                        _collector_policy->min_heap_byte_size(),
  66                        heap_size,
  67                        generation_alignment(),


  99                              max_gc_pause_sec,
 100                              max_gc_minor_pause_sec,
 101                              GCTimeRatio
 102                              );
 103 
 104   assert(!UseAdaptiveGCBoundary ||
 105     (old_gen()->virtual_space()->high_boundary() ==
 106      young_gen()->virtual_space()->low_boundary()),
 107     "Boundaries must meet");
 108   // initialize the policy counters - 2 collectors, 3 generations
 109   _gc_policy_counters =
 110     new PSGCAdaptivePolicyCounters("ParScav:MSC", 2, 3, _size_policy);
 111 
 112   // Set up the GCTaskManager
 113   _gc_task_manager = GCTaskManager::create(ParallelGCThreads);
 114 
 115   if (UseParallelOldGC && !PSParallelCompact::initialize()) {
 116     return JNI_ENOMEM;
 117   }
 118 
























 119   return JNI_OK;
 120 }
 121 
 122 void ParallelScavengeHeap::post_initialize() {
 123   // Need to init the tenuring threshold
 124   PSScavenge::initialize();
 125   if (UseParallelOldGC) {
 126     PSParallelCompact::post_initialize();
 127   } else {
 128     PSMarkSweep::initialize();
 129   }
 130   PSPromotionManager::initialize();
 131 }
 132 
 133 void ParallelScavengeHeap::update_counters() {
 134   young_gen()->update_counters();
 135   old_gen()->update_counters();
 136   MetaspaceCounters::update_performance_counters();
 137   CompressedClassSpaceCounters::update_performance_counters();
 138 }


 657   if (ZapUnusedHeapArea) {
 658     young_gen()->eden_space()->mangle_unused_area();
 659     young_gen()->to_space()->mangle_unused_area();
 660     young_gen()->from_space()->mangle_unused_area();
 661     old_gen()->object_space()->mangle_unused_area();
 662   }
 663 }
 664 #endif
 665 
 666 bool ParallelScavengeHeap::is_scavengable(oop obj) {
 667   return is_in_young(obj);
 668 }
 669 
 670 void ParallelScavengeHeap::register_nmethod(nmethod* nm) {
 671   CodeCache::register_scavenge_root_nmethod(nm);
 672 }
 673 
 674 void ParallelScavengeHeap::verify_nmethod(nmethod* nm) {
 675   CodeCache::verify_scavenge_root_nmethod(nm);
 676 }


















  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  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 "code/codeCache.hpp"
  27 #include "gc/parallel/adjoiningGenerations.hpp"
  28 #include "gc/parallel/adjoiningVirtualSpaces.hpp"
  29 #include "gc/parallel/cardTableExtension.hpp"
  30 #include "gc/parallel/gcTaskManager.hpp"
  31 #include "gc/parallel/generationSizer.hpp"
  32 #include "gc/parallel/objectStartArray.inline.hpp"
  33 #include "gc/parallel/parallelScavengeHeap.inline.hpp"
  34 #include "gc/parallel/psAdaptiveSizePolicy.hpp"
  35 #include "gc/parallel/psMarkSweep.hpp"
  36 #include "gc/parallel/psMemoryPool.hpp"
  37 #include "gc/parallel/psParallelCompact.inline.hpp"
  38 #include "gc/parallel/psPromotionManager.hpp"
  39 #include "gc/parallel/psScavenge.hpp"
  40 #include "gc/parallel/vmPSOperations.hpp"
  41 #include "gc/shared/gcHeapSummary.hpp"
  42 #include "gc/shared/gcLocker.inline.hpp"
  43 #include "gc/shared/gcWhen.hpp"
  44 #include "logging/log.hpp"
  45 #include "oops/oop.inline.hpp"
  46 #include "runtime/handles.inline.hpp"
  47 #include "runtime/java.hpp"
  48 #include "runtime/vmThread.hpp"
  49 #include "services/memoryManager.hpp"
  50 #include "services/memTracker.hpp"
  51 #include "utilities/vmError.hpp"
  52 
  53 PSYoungGen*  ParallelScavengeHeap::_young_gen = NULL;
  54 PSOldGen*    ParallelScavengeHeap::_old_gen = NULL;
  55 PSAdaptiveSizePolicy* ParallelScavengeHeap::_size_policy = NULL;
  56 PSGCAdaptivePolicyCounters* ParallelScavengeHeap::_gc_policy_counters = NULL;
  57 GCTaskManager* ParallelScavengeHeap::_gc_task_manager = NULL;
  58 
  59 jint ParallelScavengeHeap::initialize() {
  60   CollectedHeap::pre_initialize();
  61 
  62   const size_t heap_size = _collector_policy->max_heap_byte_size();
  63 
  64   ReservedSpace heap_rs = Universe::reserve_heap(heap_size, _collector_policy->heap_alignment());
  65 
  66   os::trace_page_sizes("Heap",
  67                        _collector_policy->min_heap_byte_size(),
  68                        heap_size,
  69                        generation_alignment(),


 101                              max_gc_pause_sec,
 102                              max_gc_minor_pause_sec,
 103                              GCTimeRatio
 104                              );
 105 
 106   assert(!UseAdaptiveGCBoundary ||
 107     (old_gen()->virtual_space()->high_boundary() ==
 108      young_gen()->virtual_space()->low_boundary()),
 109     "Boundaries must meet");
 110   // initialize the policy counters - 2 collectors, 3 generations
 111   _gc_policy_counters =
 112     new PSGCAdaptivePolicyCounters("ParScav:MSC", 2, 3, _size_policy);
 113 
 114   // Set up the GCTaskManager
 115   _gc_task_manager = GCTaskManager::create(ParallelGCThreads);
 116 
 117   if (UseParallelOldGC && !PSParallelCompact::initialize()) {
 118     return JNI_ENOMEM;
 119   }
 120 
 121 
 122   _eden_pool = new EdenMutableSpacePool(_young_gen,
 123                                         _young_gen->eden_space(),
 124                                         "PS Eden Space",
 125                                         false /* support_usage_threshold */);
 126 
 127   _survivor_pool = new SurvivorMutableSpacePool(_young_gen,
 128                                                 "PS Survivor Space",
 129                                                 false /* support_usage_threshold */);
 130 
 131   _old_pool = new PSGenerationPool(_old_gen,
 132                                    "PS Old Gen",
 133                                    true /* support_usage_threshold */);
 134 
 135   _young_mgr = new GCMemoryManager("PS Scavenge", "end of minor GC");
 136   _old_mgr = new GCMemoryManager("PS MarkSweep", "end of major GC");
 137 
 138   _old_mgr->add_pool(_eden_pool);
 139   _old_mgr->add_pool(_survivor_pool);
 140   _old_mgr->add_pool(_old_pool);
 141 
 142   _young_mgr->add_pool(_eden_pool);
 143   _young_mgr->add_pool(_survivor_pool);
 144 
 145   return JNI_OK;
 146 }
 147 
 148 void ParallelScavengeHeap::post_initialize() {
 149   // Need to init the tenuring threshold
 150   PSScavenge::initialize();
 151   if (UseParallelOldGC) {
 152     PSParallelCompact::post_initialize();
 153   } else {
 154     PSMarkSweep::initialize();
 155   }
 156   PSPromotionManager::initialize();
 157 }
 158 
 159 void ParallelScavengeHeap::update_counters() {
 160   young_gen()->update_counters();
 161   old_gen()->update_counters();
 162   MetaspaceCounters::update_performance_counters();
 163   CompressedClassSpaceCounters::update_performance_counters();
 164 }


 683   if (ZapUnusedHeapArea) {
 684     young_gen()->eden_space()->mangle_unused_area();
 685     young_gen()->to_space()->mangle_unused_area();
 686     young_gen()->from_space()->mangle_unused_area();
 687     old_gen()->object_space()->mangle_unused_area();
 688   }
 689 }
 690 #endif
 691 
 692 bool ParallelScavengeHeap::is_scavengable(oop obj) {
 693   return is_in_young(obj);
 694 }
 695 
 696 void ParallelScavengeHeap::register_nmethod(nmethod* nm) {
 697   CodeCache::register_scavenge_root_nmethod(nm);
 698 }
 699 
 700 void ParallelScavengeHeap::verify_nmethod(nmethod* nm) {
 701   CodeCache::verify_scavenge_root_nmethod(nm);
 702 }
 703 
 704 GrowableArray<GCMemoryManager*> ParallelScavengeHeap::memory_managers() {
 705   GrowableArray<GCMemoryManager*> memory_managers(2);
 706   memory_managers.append(_young_mgr);
 707   memory_managers.append(_old_mgr);
 708   return memory_managers;
 709 }
 710 
 711 GrowableArray<MemoryPool*> ParallelScavengeHeap::memory_pools() {
 712   GrowableArray<MemoryPool*> memory_pools(3);
 713   memory_pools.append(_eden_pool);
 714   memory_pools.append(_survivor_pool);
 715   memory_pools.append(_old_pool);
 716   return memory_pools;
 717 }
 718 
< prev index next >