comparison src/share/vm/services/memoryService.cpp @ 1089:db0d5eba9d20

6815790: G1: Missing MemoryPoolMXBeans with -XX:+UseG1GC Summary: It introduces the necessary memory pools for G1. Reviewed-by: mchung, ysr
author tonyp
date Fri, 20 Nov 2009 14:47:01 -0500
parents 37f87013dfd8
children c18cbe5936b8
comparison
equal deleted inserted replaced
1088:3fc996d4edd2 1089:db0d5eba9d20
58 case CollectedHeap::ParallelScavengeHeap : { 58 case CollectedHeap::ParallelScavengeHeap : {
59 add_parallel_scavenge_heap_info(ParallelScavengeHeap::heap()); 59 add_parallel_scavenge_heap_info(ParallelScavengeHeap::heap());
60 break; 60 break;
61 } 61 }
62 case CollectedHeap::G1CollectedHeap : { 62 case CollectedHeap::G1CollectedHeap : {
63 G1CollectedHeap::g1_unimplemented(); 63 add_g1_heap_info(G1CollectedHeap::heap());
64 return; 64 break;
65 } 65 }
66 #endif // SERIALGC 66 #endif // SERIALGC
67 default: { 67 default: {
68 guarantee(false, "Unrecognized kind of heap"); 68 guarantee(false, "Unrecognized kind of heap");
69 } 69 }
161 _managers_list->append(_major_gc_manager); 161 _managers_list->append(_major_gc_manager);
162 162
163 add_psYoung_memory_pool(heap->young_gen(), _major_gc_manager, _minor_gc_manager); 163 add_psYoung_memory_pool(heap->young_gen(), _major_gc_manager, _minor_gc_manager);
164 add_psOld_memory_pool(heap->old_gen(), _major_gc_manager); 164 add_psOld_memory_pool(heap->old_gen(), _major_gc_manager);
165 add_psPerm_memory_pool(heap->perm_gen(), _major_gc_manager); 165 add_psPerm_memory_pool(heap->perm_gen(), _major_gc_manager);
166 }
167
168 void MemoryService::add_g1_heap_info(G1CollectedHeap* g1h) {
169 assert(UseG1GC, "sanity");
170
171 _minor_gc_manager = MemoryManager::get_g1YoungGen_memory_manager();
172 _major_gc_manager = MemoryManager::get_g1OldGen_memory_manager();
173 _managers_list->append(_minor_gc_manager);
174 _managers_list->append(_major_gc_manager);
175
176 add_g1YoungGen_memory_pool(g1h, _major_gc_manager, _minor_gc_manager);
177 add_g1OldGen_memory_pool(g1h, _major_gc_manager);
178 add_g1PermGen_memory_pool(g1h, _major_gc_manager);
166 } 179 }
167 #endif // SERIALGC 180 #endif // SERIALGC
168 181
169 MemoryPool* MemoryService::add_gen(Generation* gen, 182 MemoryPool* MemoryService::add_gen(Generation* gen,
170 const char* name, 183 const char* name,
382 MemoryPool::NonHeap, 395 MemoryPool::NonHeap,
383 true /* support_usage_threshold */); 396 true /* support_usage_threshold */);
384 mgr->add_pool(perm_gen); 397 mgr->add_pool(perm_gen);
385 _pools_list->append(perm_gen); 398 _pools_list->append(perm_gen);
386 } 399 }
400
401 void MemoryService::add_g1YoungGen_memory_pool(G1CollectedHeap* g1h,
402 MemoryManager* major_mgr,
403 MemoryManager* minor_mgr) {
404 assert(major_mgr != NULL && minor_mgr != NULL, "should have two managers");
405
406 G1EdenPool* eden = new G1EdenPool(g1h);
407 G1SurvivorPool* survivor = new G1SurvivorPool(g1h);
408
409 major_mgr->add_pool(eden);
410 major_mgr->add_pool(survivor);
411 minor_mgr->add_pool(eden);
412 minor_mgr->add_pool(survivor);
413 _pools_list->append(eden);
414 _pools_list->append(survivor);
415 }
416
417 void MemoryService::add_g1OldGen_memory_pool(G1CollectedHeap* g1h,
418 MemoryManager* mgr) {
419 assert(mgr != NULL, "should have one manager");
420
421 G1OldGenPool* old_gen = new G1OldGenPool(g1h);
422 mgr->add_pool(old_gen);
423 _pools_list->append(old_gen);
424 }
425
426 void MemoryService::add_g1PermGen_memory_pool(G1CollectedHeap* g1h,
427 MemoryManager* mgr) {
428 assert(mgr != NULL, "should have one manager");
429
430 CompactingPermGenGen* perm_gen = (CompactingPermGenGen*) g1h->perm_gen();
431 PermanentGenerationSpec* spec = perm_gen->spec();
432 size_t max_size = spec->max_size() - spec->read_only_size()
433 - spec->read_write_size();
434 MemoryPool* pool = add_space(perm_gen->unshared_space(),
435 "G1 Perm Gen",
436 false, /* is_heap */
437 max_size,
438 true /* support_usage_threshold */);
439 mgr->add_pool(pool);
440
441 // in case we support CDS in G1
442 if (UseSharedSpaces) {
443 pool = add_space(perm_gen->ro_space(),
444 "G1 Perm Gen [shared-ro]",
445 false, /* is_heap */
446 spec->read_only_size(),
447 true /* support_usage_threshold */);
448 mgr->add_pool(pool);
449
450 pool = add_space(perm_gen->rw_space(),
451 "G1 Perm Gen [shared-rw]",
452 false, /* is_heap */
453 spec->read_write_size(),
454 true /* support_usage_threshold */);
455 mgr->add_pool(pool);
456 }
457 }
387 #endif // SERIALGC 458 #endif // SERIALGC
388 459
389 void MemoryService::add_code_heap_memory_pool(CodeHeap* heap) { 460 void MemoryService::add_code_heap_memory_pool(CodeHeap* heap) {
390 _code_heap_pool = new CodeHeapPool(heap, 461 _code_heap_pool = new CodeHeapPool(heap,
391 "Code Cache", 462 "Code Cache",