comparison src/share/vm/graal/graalVMToCompiler.cpp @ 15870:fe608a56e3f7

made HotSpotOptions processing faster by removing use of service loader in VM startup and only doing work for options specified on the command line
author Doug Simon <doug.simon@oracle.com>
date Fri, 23 May 2014 19:36:34 +0200
parents 063ec2920d21
children
comparison
equal deleted inserted replaced
15869:387b15da0f68 15870:fe608a56e3f7
92 _VMToCompiler_instance = JNIHandles::make_global((oop) result.get_jobject()); 92 _VMToCompiler_instance = JNIHandles::make_global((oop) result.get_jobject());
93 } 93 }
94 return Handle(JNIHandles::resolve_non_null(_VMToCompiler_instance)); 94 return Handle(JNIHandles::resolve_non_null(_VMToCompiler_instance));
95 } 95 }
96 96
97 void VMToCompiler::initOptions() { 97 void VMToCompiler::setOption(KlassHandle hotSpotOptionsClass, Handle name, Handle option, jchar spec, Handle stringValue, jlong primitiveValue) {
98 assert(!option.is_null(), "npe");
98 Thread* THREAD = Thread::current(); 99 Thread* THREAD = Thread::current();
99 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotOptions", THREAD);
100 KlassHandle optionsKlass = loadClass(name);
101 optionsKlass->initialize(THREAD);
102 check_pending_exception("Error while calling initOptions");
103 }
104
105 jboolean VMToCompiler::setOption(Handle option) {
106 assert(!option.is_null(), "");
107 Thread* THREAD = Thread::current();
108 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotOptions", THREAD);
109 TempNewSymbol setOption = SymbolTable::new_symbol("setOption", THREAD); 100 TempNewSymbol setOption = SymbolTable::new_symbol("setOption", THREAD);
110 TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/String;)Z", THREAD); 101 TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/String;Lcom/oracle/graal/options/OptionValue;CLjava/lang/String;J)V", THREAD);
111 KlassHandle optionsKlass = loadClass(name);
112 JavaValue result(T_BOOLEAN);
113 JavaCalls::call_static(&result, optionsKlass, setOption, sig, option, THREAD);
114 check_pending_exception("Error while calling setOption");
115 return result.get_jboolean();
116 }
117
118 void VMToCompiler::finalizeOptions(jboolean ciTime) {
119 Thread* THREAD = Thread::current();
120 TempNewSymbol name = SymbolTable::new_symbol("com/oracle/graal/hotspot/HotSpotOptions", THREAD);
121 TempNewSymbol finalizeOptions = SymbolTable::new_symbol("finalizeOptions", THREAD);
122 TempNewSymbol sig = SymbolTable::new_symbol("(Ljava/lang/String;)Z", THREAD);
123 KlassHandle optionsKlass = loadClass(name);
124 JavaValue result(T_VOID); 102 JavaValue result(T_VOID);
125 JavaCallArguments args; 103 JavaCallArguments args;
126 args.push_int(ciTime); 104 args.push_oop(name());
127 JavaCalls::call_static(&result, optionsKlass, finalizeOptions, vmSymbols::bool_void_signature(), &args, THREAD); 105 args.push_oop(option());
128 check_pending_exception("Error while calling finalizeOptions"); 106 args.push_int(spec);
129 } 107 args.push_oop(stringValue());
130 108 args.push_long(primitiveValue);
131 void VMToCompiler::startRuntime() { 109 JavaCalls::call_static(&result, hotSpotOptionsClass, setOption, sig, &args, THREAD);
132 JavaThread* THREAD = JavaThread::current(); 110 check_pending_exception("Error while calling setOption");
133 JavaValue result(T_VOID);
134 JavaCallArguments args;
135 TempNewSymbol startRuntime = SymbolTable::new_symbol("startRuntime", THREAD);
136 args.push_oop(VMToCompiler_instance());
137 JavaCalls::call_interface(&result, VMToCompiler_klass(), startRuntime, vmSymbols::void_method_signature(), &args, THREAD);
138 check_pending_exception("Error while calling startRuntime");
139 } 111 }
140 112
141 #ifdef COMPILERGRAAL 113 #ifdef COMPILERGRAAL
142 void VMToCompiler::bootstrap() { 114 void VMToCompiler::bootstrap() {
143 JavaThread* THREAD = JavaThread::current(); 115 JavaThread* THREAD = JavaThread::current();