[9] RFR (L): 8057042: LambdaFormEditor: derive new LFs from a base LF

Paul Sandoz paul.sandoz at oracle.com
Fri Sep 5 11:51:16 UTC 2014


On Sep 5, 2014, at 1:25 PM, Vladimir Ivanov <vladimir.x.ivanov at oracle.com> wrote:

> Paul, thanks for review.
> 
>> Generally looks good (re: Peter's observation of continue/break).
>> 
>> - LambdaFormEditor
>> 
>>   61     private static final class Transform {
>>   62         final long packedBytes;
>>   63         final byte[] fullBytes;
>>   64         final LambdaForm result;  // result of transform, or null, if there is none available
>>   65
>>   66         private enum Kind {
>> 
>> More an oddity really, Transform.Kind is private but exposed via package private methods.
> Good point. I'll fix that.
> 

+1 on review.


>> 
>>  187         static Transform of(Kind k, int b1, byte[] b234) {
>> 
>> 
>> It might be worthwhile investing in a unit test for LambdaFormEditor to exercise the transform types and transitions, otherwise edge cases might bite us later.
> Tests for JEP 210 (SQE is working on them) should cover that.
> 

Ok.


>> I was thinking Transform could be greatly simplified if one just uses byte[], but IIUC (via JOL) that increases the instance size by 16 bytes, although that may be small compared to the LambdaForm result and if say a WekRef is also used to hold that result. Plus if that is the case the transformCache could be simplified by just supporting Transform[] and ConcurrentHashMap. I guess the underlying question i am asking here is do these space savings really give us much over some less complicated code?
> All these specializations can be considered overoptimizations, but I'd prefer to leave them. Complexity is manageable, encapsulated, and localized ([1],[2]).
> 

> And these specializations are for the common case. The numbers I got for Octane shows that:
>  (1) large transforms are very rare:
> 	98-99% of Transforms fit into packed representation;
>  (2) for LF caches
>      (a) 70-80% are single-element;
>      (b) 20-30% fit into array (<16 elements)
>      (c) CHM is needed very rarely (<<1%)
> 

OK, good to see some numbers on this, quite reassuring.

Paul.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 841 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://mail.openjdk.java.net/pipermail/mlvm-dev/attachments/20140905/0b53a5e8/signature.asc>


More information about the mlvm-dev mailing list