CHA for interfaces in C2 compiler

Vitaly Davidovich vitalyd at gmail.com
Thu Apr 16 18:11:10 UTC 2015


Hmm, I didn't know that bc verifier doesn't verify interfaces.  Is that an
open problem at the moment?

Sounds like interfaces just get the short end of the stick all around :).

On Thu, Apr 16, 2015 at 1:11 PM, Vladimir Ivanov <
vladimir.x.ivanov at oracle.com> wrote:

> There's a more compelling use case for CHA on interfaces [1].
> That's the case where type profiling fails.
>
> The other argument to extend CHA for interfaces is to take default methods
> into account [2].
>
> Most likely, single interface implementer case you are looking for will
> follow nicely from one of these RFEs.
>
> But, as noted by Tom in [1], CHA doesn't allow to reliably eliminate the
> type check for interfaces (since bytecode verifier doesn't provide type
> safety guarantees for interfaces). Except the array case, where type check
> happens during array store and JIT can skip rely on that.
>
> Best regards,
> Vladimir Ivanov
>
> [1] https://bugs.openjdk.java.net/browse/JDK-6986483
> [2] https://bugs.openjdk.java.net/browse/JDK-8036580
>
> On 4/16/15 1:24 PM, Vitaly Davidovich wrote:
>
>> I'd argue that the cacheline fetch is more of an issue when not dealing
>> with array iteration but with the "islands" I was referring to earlier.
>> In the array iteration scenario, the actual method invoked may be less
>> expensive than the type check.  Yes, the branch will be predicted and
>> all, but that's still extra code that will execute, extra entry in the
>> BTB, etc.
>>
>> Maybe you guys aren't convinced, but do realize that there's plenty of
>> code out there with the "one impl of an interface loaded" situation.
>> Every small efficiency gain counts, IMO.
>>
>> sent from my phone
>>
>> On Apr 16, 2015 2:56 AM, "John Rose" <john.r.rose at oracle.com
>> <mailto:john.r.rose at oracle.com>> wrote:
>>
>>     The real cost of the type check is a cache line fetch. In this case
>>     you have a bunch of objects whose code is the same method(s) and
>>     data fields are the only way to vary the behavior. So almost any
>>     plausible application of this pattern will need the same cache line
>>     as the data fields.
>>
>>     We have yet to see a convincing use case for this CHA (THA) case.  I
>>     put some code in the VM to support this once but we never needed it
>>     and it was removed.
>>
>>     (Another opt with a similar flavor would be support for the
>>     singleton pattern.)
>>
>>     – John
>>
>>      > On Apr 15, 2015, at 8:05 PM, Vitaly Davidovich <vitalyd at gmail.com
>>     <mailto:vitalyd at gmail.com>> wrote:
>>      >
>>      > That would certainly be a place where removing the type check
>>     would be beneficial
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20150416/98a39445/attachment-0001.html>


More information about the hotspot-compiler-dev mailing list