CHA for interfaces in C2 compiler

Vitaly Davidovich vitalyd at
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
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


On Wed, Apr 15, 2015 at 12:26 PM, Vladimir Ivanov <
vladimir.x.ivanov at> 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: <>

More information about the hotspot-compiler-dev mailing list