// Add memory pools for GenCollectedHeap // This function currently only supports two generations collected heap. // The collector for GenCollectedHeap will have two memory managers. void MemoryService::add_gen_collected_heap_info(GenCollectedHeap* heap) { CollectorPolicy* policy = heap->collector_policy(); assert(policy->is_two_generation_policy(), "Only support two generations"); guarantee(heap->n_gens() == 2, "Only support two-generation heap"); if (policy->is_mark_sweep_policy()) { _minor_gc_manager = MemoryManager::get_copy_memory_manager(); _major_gc_manager = MemoryManager::get_msc_memory_manager(); } _managers_list->append(_minor_gc_manager); _managers_list->append(_major_gc_manager); add_generation_memory_pool(heap->get_gen(minor), _major_gc_manager, _minor_gc_manager); add_generation_memory_pool(heap->get_gen(major), _major_gc_manager); PermGen::Name name = policy->permanent_generation()->name(); switch (name) { case PermGen::MarkSweepCompact: { CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) heap->perm_gen(); add_compact_perm_gen_memory_pool(perm_gen, _major_gc_manager); break; } default: guarantee(false, "Unrecognized perm generation"); break; } }
// Add memory pools for GenCollectedHeap // This function currently only supports two generations collected heap. // The collector for GenCollectedHeap will have two memory managers. void MemoryService::add_gen_collected_heap_info(GenCollectedHeap* heap) { CollectorPolicy* policy = heap->collector_policy(); assert(policy->is_two_generation_policy(), "Only support two generations"); guarantee(heap->n_gens() == 2, "Only support two-generation heap"); TwoGenerationCollectorPolicy* two_gen_policy = policy->as_two_generation_policy(); if (two_gen_policy != NULL) { GenerationSpec** specs = two_gen_policy->generations(); Generation::Name kind = specs[0]->name(); switch (kind) { case Generation::DefNew: _minor_gc_manager = MemoryManager::get_copy_memory_manager(); break; #ifndef SERIALGC case Generation::ParNew: case Generation::ASParNew: _minor_gc_manager = MemoryManager::get_parnew_memory_manager(); break; #endif // SERIALGC default: guarantee(false, "Unrecognized generation spec"); break; } if (policy->is_mark_sweep_policy()) { _major_gc_manager = MemoryManager::get_msc_memory_manager(); #ifndef SERIALGC } else if (policy->is_concurrent_mark_sweep_policy()) { _major_gc_manager = MemoryManager::get_cms_memory_manager(); #endif // SERIALGC } else { guarantee(false, "Unknown two-gen policy"); } } else { guarantee(false, "Non two-gen policy"); } _managers_list->append(_minor_gc_manager); _managers_list->append(_major_gc_manager); add_generation_memory_pool(heap->get_gen(minor), _major_gc_manager, _minor_gc_manager); add_generation_memory_pool(heap->get_gen(major), _major_gc_manager); PermGen::Name name = policy->permanent_generation()->name(); switch (name) { case PermGen::MarkSweepCompact: { CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) heap->perm_gen(); add_compact_perm_gen_memory_pool(perm_gen, _major_gc_manager); break; } #ifndef SERIALGC case PermGen::ConcurrentMarkSweep: { CMSPermGenGen* cms_gen = (CMSPermGenGen*) heap->perm_gen(); add_cms_perm_gen_memory_pool(cms_gen, _major_gc_manager); break; } #endif // SERIALGC default: guarantee(false, "Unrecognized perm generation"); break; } }