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

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Sep 5 12:44:05 UTC 2014


Paul, Peter, Morris, thanks for review.

Best regards,
Vladimir Ivanov

On 9/5/14, 3:51 PM, Paul Sandoz wrote:
>
> 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.
>


More information about the mlvm-dev mailing list