81 GCMemoryManager* MemoryManager::get_cms_memory_manager() {
82 return (GCMemoryManager*) new CMSMemoryManager();
83 }
84
85 GCMemoryManager* MemoryManager::get_psScavenge_memory_manager() {
86 return (GCMemoryManager*) new PSScavengeMemoryManager();
87 }
88
89 GCMemoryManager* MemoryManager::get_psMarkSweep_memory_manager() {
90 return (GCMemoryManager*) new PSMarkSweepMemoryManager();
91 }
92
93 GCMemoryManager* MemoryManager::get_g1YoungGen_memory_manager() {
94 return (GCMemoryManager*) new G1YoungGenMemoryManager();
95 }
96
97 GCMemoryManager* MemoryManager::get_g1OldGen_memory_manager() {
98 return (GCMemoryManager*) new G1OldGenMemoryManager();
99 }
100
101 instanceOop MemoryManager::get_memory_manager_instance(TRAPS) {
102 // Must do an acquire so as to force ordering of subsequent
103 // loads from anything _memory_mgr_obj points to or implies.
104 instanceOop mgr_obj = (instanceOop)OrderAccess::load_ptr_acquire(&_memory_mgr_obj);
105 if (mgr_obj == NULL) {
106 // It's ok for more than one thread to execute the code up to the locked region.
107 // Extra manager instances will just be gc'ed.
108 Klass* k = Management::sun_management_ManagementFactory_klass(CHECK_0);
109 instanceKlassHandle ik(THREAD, k);
110
111 Handle mgr_name = java_lang_String::create_from_str(name(), CHECK_0);
112
113 JavaValue result(T_OBJECT);
114 JavaCallArguments args;
115 args.push_oop(mgr_name); // Argument 1
116
117 Symbol* method_name = NULL;
118 Symbol* signature = NULL;
119 if (is_gc_memory_manager()) {
120 method_name = vmSymbols::createGarbageCollector_name();
|
81 GCMemoryManager* MemoryManager::get_cms_memory_manager() {
82 return (GCMemoryManager*) new CMSMemoryManager();
83 }
84
85 GCMemoryManager* MemoryManager::get_psScavenge_memory_manager() {
86 return (GCMemoryManager*) new PSScavengeMemoryManager();
87 }
88
89 GCMemoryManager* MemoryManager::get_psMarkSweep_memory_manager() {
90 return (GCMemoryManager*) new PSMarkSweepMemoryManager();
91 }
92
93 GCMemoryManager* MemoryManager::get_g1YoungGen_memory_manager() {
94 return (GCMemoryManager*) new G1YoungGenMemoryManager();
95 }
96
97 GCMemoryManager* MemoryManager::get_g1OldGen_memory_manager() {
98 return (GCMemoryManager*) new G1OldGenMemoryManager();
99 }
100
101 GCMemoryManager* MemoryManager::get_epsilon_memory_manager() {
102 return (GCMemoryManager*) new EpsilonMemoryManager();
103 }
104
105 instanceOop MemoryManager::get_memory_manager_instance(TRAPS) {
106 // Must do an acquire so as to force ordering of subsequent
107 // loads from anything _memory_mgr_obj points to or implies.
108 instanceOop mgr_obj = (instanceOop)OrderAccess::load_ptr_acquire(&_memory_mgr_obj);
109 if (mgr_obj == NULL) {
110 // It's ok for more than one thread to execute the code up to the locked region.
111 // Extra manager instances will just be gc'ed.
112 Klass* k = Management::sun_management_ManagementFactory_klass(CHECK_0);
113 instanceKlassHandle ik(THREAD, k);
114
115 Handle mgr_name = java_lang_String::create_from_str(name(), CHECK_0);
116
117 JavaValue result(T_OBJECT);
118 JavaCallArguments args;
119 args.push_oop(mgr_name); // Argument 1
120
121 Symbol* method_name = NULL;
122 Symbol* signature = NULL;
123 if (is_gc_memory_manager()) {
124 method_name = vmSymbols::createGarbageCollector_name();
|