Mercurial > hg > graal-compiler
diff 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 |
line wrap: on
line diff
--- a/src/share/vm/compiler/compileBroker.cpp Tue Nov 27 14:11:37 2012 -0800 +++ b/src/share/vm/compiler/compileBroker.cpp Thu Nov 29 16:50:29 2012 -0500 @@ -269,10 +269,12 @@ const char* comment, bool is_blocking) { assert(!_lock->is_locked(), "bad locking"); + InstanceKlass* holder = method->method_holder(); _compile_id = compile_id; _method = method(); - _method_loader = JNIHandles::make_global(_method->method_holder()->class_loader()); + _method_holder = JNIHandles::make_global( + holder->is_anonymous() ? holder->java_mirror(): holder->class_loader()); _osr_bci = osr_bci; _is_blocking = is_blocking; _comp_level = comp_level; @@ -283,7 +285,7 @@ _code_handle = NULL; _hot_method = NULL; - _hot_method_loader = NULL; + _hot_method_holder = NULL; _hot_count = hot_count; _time_queued = 0; // tidy _comment = comment; @@ -295,8 +297,12 @@ _hot_method = _method; } else { _hot_method = hot_method(); + // only add loader or mirror if different from _method_holder + InstanceKlass* hot_holder = hot_method->method_holder(); + _hot_method_holder = JNIHandles::make_global( + hot_holder->is_anonymous() ? hot_holder->java_mirror() : + hot_holder->class_loader()); } - _hot_method_loader = JNIHandles::make_global(_hot_method->method_holder()->class_loader()); } } @@ -321,8 +327,8 @@ void CompileTask::free() { set_code(NULL); assert(!_lock->is_locked(), "Should not be locked when freed"); - JNIHandles::destroy_global(_method_loader); - JNIHandles::destroy_global(_hot_method_loader); + JNIHandles::destroy_global(_method_holder); + JNIHandles::destroy_global(_hot_method_holder); }