[13] RFR (M): 8223213: Implement fast class initialization checks on x86-64
coleen.phillimore at oracle.com
coleen.phillimore at oracle.com
Tue May 28 21:24:52 UTC 2019
I reviewed mostly the interpreter and shared change. As someone else
commented, I don't like the addition of a develop flag because some
platforms don't support class initialization barriers. Isn't it normal
to do this with the misnamed VM_Version, like adding
VM_Version::supports_class_initialization_barriers() with x86 returning
true until the other platforms false until they implement the feature.
Then there isn't another flag configuration to test (or not test).
http://cr.openjdk.java.net/~vlivanov/8223213/webrev.02/src/hotspot/cpu/x86/interp_masm_x86.cpp.udiff.html
I have to admit that the relationship between resolved bytecode in
bytecode_1/bytecode_2 and which _f1/_f2 held the Method* was actually a
surprise to me. There's nothing structurally in cpCache other than
reading the code that enforces this and it wasn't always a Method* in f2
for invokeinterface, for example, so it's sort of an accident.
But this code is correct and I think as a follow up we should make
load_invoke_cp_cache_entry() call load_resolved_method_at_index() too
and have some assert in cpCache that this is true, or rewrite the
cpCache completely.
The code to do the initialization barrier in the interpreter looks good.
Thanks,
Coleen
On 5/28/19 7:40 AM, Vladimir Ivanov wrote:
> Thanks, Martin.
>
> Updated webrev:
> http://cr.openjdk.java.net/~vlivanov/8223213/webrev.02/
>
>> Are these assertions safe?
>> + assert(method()->needs_clinit_barrier(), "barrier not needed");
>> + assert(method()->holder()->is_being_initialized(), "barrier not
>> needed");
>> Can it happen that initialization concurrently completes before they
>> are evaluated?
>
> Good point. Even though ciInstanceKlass caches initialization state of
> the corresponding InstanceKlass, it seems there's a possibility that
> the state is updated during the compilation (see
> ciInstanceKlass::update_if_shared). I enhanced the asserts to check
> that initialization has been stated.
Ok, this makes sense.
>
>> A small suggestion for x86 TemplateTable::invokeinterface:
>> It'd be nice to replace load of interface klass by your new
>> load_method_holder.
>
> Agree. Updated.
This is nice.
>
> Best regards,
> Vladimir Ivanov
More information about the hotspot-dev
mailing list