On Jul 24, 2016, at 3:41 PM, Mark Roos <mr...@roos.com> wrote:
> 
>  A few questions on implementation. 
> 
> My old prototype looks like: 
>                 private RtObject[] _mDicts = new RtObject[8]; // array of 
> method dicts 
>                 private MethodHandle[] _methods = new MethodHandle[8]; // the 
> code MH 
>                 MethodHandle lookupSelf(RtObject rcvr, RtCallSite site) 
>                         RtObject methodDict = rcvr.classField(); 
>                         if(_mDicts[0] == methodDict) return _methods[0]; 
>                         if(_mDicts[1] == methodDict) return _methods[1];.... 
> 
> If I fill the arrays I treat them as a circular buffer and overwrite the 
> existing contents. 
> 
> You mention the need for the last element in the arrays to be null.  Why? 

It doesn't; I was thinking of a doubtful loop shape improvement.
In you code, there's no loop at all.

> If the arrays are declared 'Stable'  does this mean that when I fill them I 
> cannot reuse them?  Would 
> I just replace the arrays with new ones? 

The documentation for Stable (which is not a standard feature yet, and may not 
become one)
says you are only allowed to set a stable array (any level of structure, from 
root to leaf) exactly
once.  The JIT avoids constant folding the stable array structure until it sees 
a non-default value.
If you then change a non-default value to another value, you've broken the 
rules.

Perhaps the real rule is that you have to be willing to live with any of the 
(non-default) values
that the JIT chooses to constant-fold.  In any case, that's operationally what 
the JIT provides
for you if you use Stable values.

The above set of rules or non-rules is only half-baked.  That's why Stable is 
not a feature.
It's merely an internal optimization.

> You also mention a concern if the test items are Objects vs MethodHandles.  
> My test MH does the same 
> object reference compare and I was trying to avoid executing the 
> rcvr.classField() for each test.  Would 
> I be better off if I used a test MH instead? 

If you have a clean token you can use with comparisons, that is fine.

The advantage of MH's is simple:  They get inlined vigorously.

– John

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to