Mercurial > hg > graal-compiler
comparison src/share/vm/compiler/compileBroker.cpp @ 7185:90273fc0a981
8000662: NPG: nashorn ant clean test262 out-of-memory with Java heap
Summary: Add ClassLoaderData object for each anonymous class with metaspaces to allocate in.
Reviewed-by: twisti, jrose, stefank
author | coleenp |
---|---|
date | Thu, 29 Nov 2012 16:50:29 -0500 |
parents | 18fb7da42534 |
children | 291ffc492eb6 30866cd626b0 |
comparison
equal
deleted
inserted
replaced
7181:2fc0334f613a | 7185:90273fc0a981 |
---|---|
267 methodHandle hot_method, | 267 methodHandle hot_method, |
268 int hot_count, | 268 int hot_count, |
269 const char* comment, | 269 const char* comment, |
270 bool is_blocking) { | 270 bool is_blocking) { |
271 assert(!_lock->is_locked(), "bad locking"); | 271 assert(!_lock->is_locked(), "bad locking"); |
272 InstanceKlass* holder = method->method_holder(); | |
272 | 273 |
273 _compile_id = compile_id; | 274 _compile_id = compile_id; |
274 _method = method(); | 275 _method = method(); |
275 _method_loader = JNIHandles::make_global(_method->method_holder()->class_loader()); | 276 _method_holder = JNIHandles::make_global( |
277 holder->is_anonymous() ? holder->java_mirror(): holder->class_loader()); | |
276 _osr_bci = osr_bci; | 278 _osr_bci = osr_bci; |
277 _is_blocking = is_blocking; | 279 _is_blocking = is_blocking; |
278 _comp_level = comp_level; | 280 _comp_level = comp_level; |
279 _num_inlined_bytecodes = 0; | 281 _num_inlined_bytecodes = 0; |
280 | 282 |
281 _is_complete = false; | 283 _is_complete = false; |
282 _is_success = false; | 284 _is_success = false; |
283 _code_handle = NULL; | 285 _code_handle = NULL; |
284 | 286 |
285 _hot_method = NULL; | 287 _hot_method = NULL; |
286 _hot_method_loader = NULL; | 288 _hot_method_holder = NULL; |
287 _hot_count = hot_count; | 289 _hot_count = hot_count; |
288 _time_queued = 0; // tidy | 290 _time_queued = 0; // tidy |
289 _comment = comment; | 291 _comment = comment; |
290 | 292 |
291 if (LogCompilation) { | 293 if (LogCompilation) { |
293 if (hot_method.not_null()) { | 295 if (hot_method.not_null()) { |
294 if (hot_method == method) { | 296 if (hot_method == method) { |
295 _hot_method = _method; | 297 _hot_method = _method; |
296 } else { | 298 } else { |
297 _hot_method = hot_method(); | 299 _hot_method = hot_method(); |
300 // only add loader or mirror if different from _method_holder | |
301 InstanceKlass* hot_holder = hot_method->method_holder(); | |
302 _hot_method_holder = JNIHandles::make_global( | |
303 hot_holder->is_anonymous() ? hot_holder->java_mirror() : | |
304 hot_holder->class_loader()); | |
298 } | 305 } |
299 _hot_method_loader = JNIHandles::make_global(_hot_method->method_holder()->class_loader()); | |
300 } | 306 } |
301 } | 307 } |
302 | 308 |
303 _next = NULL; | 309 _next = NULL; |
304 } | 310 } |
319 // ------------------------------------------------------------------ | 325 // ------------------------------------------------------------------ |
320 // CompileTask::free | 326 // CompileTask::free |
321 void CompileTask::free() { | 327 void CompileTask::free() { |
322 set_code(NULL); | 328 set_code(NULL); |
323 assert(!_lock->is_locked(), "Should not be locked when freed"); | 329 assert(!_lock->is_locked(), "Should not be locked when freed"); |
324 JNIHandles::destroy_global(_method_loader); | 330 JNIHandles::destroy_global(_method_holder); |
325 JNIHandles::destroy_global(_hot_method_loader); | 331 JNIHandles::destroy_global(_hot_method_holder); |
326 } | 332 } |
327 | 333 |
328 | 334 |
329 void CompileTask::mark_on_stack() { | 335 void CompileTask::mark_on_stack() { |
330 // Mark these methods as something redefine classes cannot remove. | 336 // Mark these methods as something redefine classes cannot remove. |