Mercurial > hg > truffle
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", |