CHA for interfaces in C2 compiler
Vitaly Davidovich
vitalyd at gmail.com
Wed Apr 15 16:37:50 UTC 2015
Hi Vladimir,
Here's what I see on 7u60:
private static int doIt(final Foo f) {
return f.num();
}
interface Foo
{
int num();
}
final class FooImpl implements Foo
{
@Override
public int num() {
return 1;
}
}
Running a simple test where only FooImpl is loaded (in fact, it's the only
impl period) produces the following asm (stripped down to essentials):
0x00007f0b31e14a6c: mov 0x8(%rsi),%r10d ; implicit exception:
dispatches to 0x00007f0b31e14a9d
0x00007f0b31e14a70: cmp $0x71c9e068,%r10d ; {oop('FooImpl')}
0x00007f0b31e14a77: jne 0x00007f0b31e14a8a
0x00007f0b31e14a79: mov $0x1,%eax
0x00007f0b31e14a7e: add $0x10,%rsp
0x00007f0b31e14a82: pop %rbp
If I change Foo to be an abstract class, we get this:
0x00007f0209deb18c: test %rsi,%rsi
0x00007f0209deb18f: je 0x00007f0209deb1a2
0x00007f0209deb191: mov $0x1,%eax
0x00007f0209deb196: add $0x10,%rsp
0x00007f0209deb19a: pop %rbp
So there's an explicit null check but no type check.
Did something change in java 8 or 9 that leads you to say "completely
eliminated"?
Thanks
On Wed, Apr 15, 2015 at 12:26 PM, Vladimir Ivanov <
vladimir.x.ivanov at oracle.com> wrote:
> Vitaly,
>
> Type profiling reliably detects single interface implementation cases and
> type check overhead is completely eliminated in most of the cases (type
> checks are aggressively commoned).
>
> Do you still think it is worth an effort?
>
> Best regards,
> Vladimir Ivanov
>
>
> On 4/15/15 5:10 PM, Vitaly Davidovich wrote:
>
>> Hi guys,
>>
>> So CHA on classes works nicely in the case of only one subtype loaded.
>> What about interfaces? Currently, it looks like no such
>> optimization/analysis is done. In my experience, there's a substantial
>> amount of code that exposes an interface via some API, but then loads
>> only implementation of it. The interface is used instead of abstract
>> class to allow more flexibility in the future.
>>
>> I fully realize that lots of interfaces have more than 1 implementer
>> loaded at runtime, but I also think it's worthwhile to attempt CHA for
>> them.
>>
>> Is this something that's feasible to do? It would require more class
>> loading dependencies to be tracked, but I'm also fine with having this
>> be an extra flag that I can use to enable/disable this optimization.
>>
>> Thoughts?
>>
>> Thanks
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150415/72d22e78/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list