RFR 8029567: Clean up linkResolver code

Karen Kinnear karen.kinnear at oracle.com
Wed May 27 21:24:38 UTC 2015


Coleen, Jiangli,


On May 27, 2015, at 3:26 PM, Coleen Phillimore wrote:

> 
> Jiangli,  Thank you for reviewing my change.
> 
> On 5/26/15 10:15 PM, Jiangli Zhou wrote:
>> Hi Coleen,
>> 
>> I like the refactor changes. The code looks much cleaner. Here are some of my comments.
>> 
>> *LinkInfo:*
>> ciEnv::lookup_method(), ciField::will_link() and ciMethod::resolve_vtable_index() create LinkInfo with ‘_check_access’ set to true. It might be better to make ‘_check_access’ default to ‘true’ in the LinkInfo constructor.
> 
> Opinion comments are welcome because this is a cleanup change but I went back and forth on this, and I really want the caller of the LinkInfo constructor to explicitly decide whether access checks should be performed.   The language rules deciding this are daunting so I didn't want to allow for mistakes.
I will add my opinion that check_access should default to true. It should be a very very rare caller that turns it off and we want to highlight
that in code reviews.

thanks,
Karen

>> *
>> *
>> *Bytecode_invoke::static_target(), bytecode.cpp:*
>> Bytecode_invoke::static_target() originally returns a null handle instead of ‘NULL’ if the method is not resolved. Now that’s changed, however caller of Bytecode_invoke::static_target() still expects null handle instead of ’NULL’.
>> 
>> *LinkResolver::lookup_method_in_klasses(), linkResolver.cpp:*
>> Same as Bytecode_invoke::static_target(). This now might return ‘NULL’ instead of null handle.
>> 
> https://bugs.openjdk.java.net/browse/JDK-8066624
> 
> This code for CHECK_(nullHandle) is my fault because of an experiment I was doing years ago by disallowing the default conversion from oop to Handle.  The experiment was because when converting to a Handle, the function Thread::current() was being called implicitly when in most cases THREAD is available and showed up in somebody's profiling data.
> 
> Because the conversion from NULL to any Handle does not call Thread::current() and it's allowed, I think CHECK_NULL looks a lot better in the code than CHECK_(methodHandle()).
> 
> I changed the code to this though:
> 
> methodHandle Bytecode_invoke::static_target(TRAPS) {
>  constantPoolHandle constants(THREAD, this->constants());
> 
>  Bytecodes::Code bc = invoke_code();
>  return LinkResolver::resolve_method_statically(bc, constants, index(), THREAD);
> }
> 
> Because CHECK_NULL in a return statement does something bad that I can't remember.
>> The lookup_polymorphic_method() and resolve_method() have the similar issue. It probably is better to make all those return ‘null handle’ like they originally do.
>> 
>> *Indentation:*
>> loaderConstraints.hpp line 68
>> loaderConstraints.cpp line 74
>> linkResolver.cpp line 440 - 444
>> systemDictionary.cpp line 2238 - 2239
> 
> I fixed these.  My window width for code is 100 so I tried not to wrap for lines longer than that.
> 
> Thanks!
> Coleen
>> 
>> Thanks,
>> Jiangli
>> 
>> On May 14, 2015, at 4:16 PM, Coleen Phillimore <coleen.phillimore at oracle.com <mailto:coleen.phillimore at oracle.com>> wrote:
>> 
>>> Summary: Moved non-const reference return values to actual return values, refactored error handling code, pass CLD rather than class_loader oop, remove oop from Method* variable names.
>>> 
>>> Also modified the long parameter lists into a class LinkInfo to hold information from the constant pool that is always passed through several layers of functions together.  Also reformatted to split parameter list lines to some reasonable width.
>>> 
>>> The type methodHandle should be passed as const reference types to avoid copy construction, because it has a non-trivial destructor. This sort of change could be made in more places in the JVM, but I stopped with linkResolver.
>>> 
>>> Ran all hotspot jtreg tests, jck lang/vm/api/java_lang tests, internal testbase tests: vm.quick.testlist, vm.defmeth.testlist, proposed new selection-resolution tests, jdk/java/lang/invoke tests (see RFR).
>>> 
>>> open webrev at http://cr.openjdk.java.net/~coleenp/8029567/ <http://cr.openjdk.java.net/%7Ecoleenp/8029567/>
>>> bug link https://bugs.openjdk.java.net/browse/JDK-8029567
>>> 
>>> Thanks,
>>> Coleen
>> 
> 



More information about the hotspot-runtime-dev mailing list