// Add memory pool(s) for one generation void MemoryService::add_generation_memory_pool(Generation* gen, MemoryManager* major_mgr, MemoryManager* minor_mgr) { Generation::Name kind = gen->kind(); int index = _pools_list->length(); switch (kind) { case Generation::DefNew: { assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers"); DefNewGeneration* young_gen = (DefNewGeneration*) gen; // Add a memory pool for each space and young gen doesn't // support low memory detection as it is expected to get filled up. MemoryPool* eden = add_space(young_gen->eden(), "Eden Space", true, /* is_heap */ young_gen->max_eden_size(), false /* support_usage_threshold */); MemoryPool* survivor = add_survivor_spaces(young_gen, "Survivor Space", true, /* is_heap */ young_gen->max_survivor_size(), false /* support_usage_threshold */); break; } case Generation::MarkSweepCompact: { assert(major_mgr != NULL && minor_mgr == NULL, "Should have only one manager"); add_gen(gen, "Tenured Gen", true, /* is_heap */ true /* support_usage_threshold */); break; } default: assert(false, "should not reach here"); // no memory pool added for others break; } assert(major_mgr != NULL, "Should have at least one manager"); // Link managers and the memory pools together for (int i = index; i < _pools_list->length(); i++) { MemoryPool* pool = _pools_list->at(i); major_mgr->add_pool(pool); if (minor_mgr != NULL) { minor_mgr->add_pool(pool); } } }
// Add memory pool(s) for one generation void MemoryService::add_generation_memory_pool(Generation* gen, MemoryManager* major_mgr, MemoryManager* minor_mgr) { guarantee(gen != NULL, "No generation for memory pool"); Generation::Name kind = gen->kind(); int index = _pools_list->length(); switch (kind) { case Generation::DefNew: { assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers"); DefNewGeneration* young_gen = (DefNewGeneration*) gen; // Add a memory pool for each space and young gen doesn't // support low memory detection as it is expected to get filled up. MemoryPool* eden = add_space(young_gen->eden(), "Eden Space", true, /* is_heap */ young_gen->max_eden_size(), false /* support_usage_threshold */); MemoryPool* survivor = add_survivor_spaces(young_gen, "Survivor Space", true, /* is_heap */ young_gen->max_survivor_size(), false /* support_usage_threshold */); break; } #if INCLUDE_ALL_GCS case Generation::ParNew: case Generation::ASParNew: { assert(major_mgr != NULL && minor_mgr != NULL, "Should have two managers"); // Add a memory pool for each space and young gen doesn't // support low memory detection as it is expected to get filled up. ParNewGeneration* parnew_gen = (ParNewGeneration*) gen; MemoryPool* eden = add_space(parnew_gen->eden(), "Par Eden Space", true /* is_heap */, parnew_gen->max_eden_size(), false /* support_usage_threshold */); MemoryPool* survivor = add_survivor_spaces(parnew_gen, "Par Survivor Space", true, /* is_heap */ parnew_gen->max_survivor_size(), false /* support_usage_threshold */); break; } #endif // INCLUDE_ALL_GCS case Generation::MarkSweepCompact: { assert(major_mgr != NULL && minor_mgr == NULL, "Should have only one manager"); add_gen(gen, "Tenured Gen", true, /* is_heap */ true /* support_usage_threshold */); break; } #if INCLUDE_ALL_GCS case Generation::ConcurrentMarkSweep: case Generation::ASConcurrentMarkSweep: { assert(major_mgr != NULL && minor_mgr == NULL, "Should have only one manager"); ConcurrentMarkSweepGeneration* cms = (ConcurrentMarkSweepGeneration*) gen; MemoryPool* pool = add_cms_space(cms->cmsSpace(), "CMS Old Gen", true, /* is_heap */ cms->reserved().byte_size(), true /* support_usage_threshold */); break; } #endif // INCLUDE_ALL_GCS default: assert(false, "should not reach here"); // no memory pool added for others break; } assert(major_mgr != NULL, "Should have at least one manager"); // Link managers and the memory pools together for (int i = index; i < _pools_list->length(); i++) { MemoryPool* pool = _pools_list->at(i); major_mgr->add_pool(pool); if (minor_mgr != NULL) { minor_mgr->add_pool(pool); } } }