Hi Amy,

RangeCheckMicroBenchmark.java measures access for ArrayList. Did you update 
ArrayList? (i don’t see it in your current patch).

Paul.

> On 16 Jan 2017, at 01:41, Amy Lu <amy...@oracle.com> wrote:
> 
> Thank you Paul and Martin for your review.
> 
> On 1/13/17 12:52 AM, Paul Sandoz wrote:
>> HI Amy,
>> 
>> Overall this looks very good, well done.
>> 
>> 
>> At this point we are down to two things:
>> 
>> 1) should we preserve exception messages?
>> 
>> 2) due diligence on the performance.
>> 
>> 
>> On 1) my preference is that uniform (and informative) messages are better 
>> for IndexOutOfBounds and subtypes, and defining that in addition to the 
>> checks in one place is very valuable. In some sense that does change some 
>> behavioural compatibility and i think because of that pushing in 10 (when 
>> the repos) open with a CCC would be more preferable.
> Got it. Will wait for 10.
>> 
>> On 2) this is a valuable exercise to perform (either using an existing test 
>> and/or writing JMH benchmarks). I don’t expect any major problems. Care was 
>> taken to ensure the uncommon exception processing path will optimize away 
>> for the common case. The BiFunction parameter passed as the last argument is 
>> always a constant, so should fold away from the hot path.
> 
> Tested with java/util/ArrayList/RangeCheckMicroBenchmark.java and 
> java/nio/Buffer/SwapMicroBenchmark.java, no performance regression observed.
> 
> java/util/ArrayList/RangeCheckMicroBenchmark.java
> 
> without 8146668
> --------------------
> get                             26          1
> set                             40.6        1.5707
> get/set                         85.7        3.3002
> add/remove at end               337.5       12.9197
> subList get                     25          0.9747
> subList set                     59.9        2.3
> subList get/set                 92.2        3.5414
> subList add/remove at end       429.8       16.45
> 
> with 8146668
> --------------------
> get                             26          1
> set                             39.1        1.5188
> get/set                         86.8        3.3363
> add/remove at end               335.5       12.8549
> subList get                     24.8        0.9715
> subList set                     59.2        2.2728
> subList get/set                 92.2        3.5473
> subList add/remove at end       427.7       16.3789
> 
> java/nio/Buffer/SwapMicroBenchmark.java
> 
> without 8146668
> --------------------
> swap char LITTLE_ENDIAN         11          1
> swap short LITTLE_ENDIAN        10.2        0.9895
> swap int LITTLE_ENDIAN          5           0.4961
> swap long LITTLE_ENDIAN         3           0.3345
> 
> with 8146668
> --------------------
> swap char LITTLE_ENDIAN         10.1        1
> swap short LITTLE_ENDIAN        10.1        0.9995
> swap int LITTLE_ENDIAN          5           0.5005
> swap long LITTLE_ENDIAN         3           0.3327
> 
> Thanks,
> Amy
>> 
>> Paul.
>> 
>> 
>>> On 11 Jan 2017, at 18:10, Amy Lu <amy...@oracle.com> wrote:
>>> 
>>> 8135248 and 8155794 introduced utility methods for checking indexes and 
>>> ranges. Existing code with custom checkIndex/checkRange can be updated to 
>>> use these methods. Please review the patch for this purpose:
>>> 
>>> bug: https://bugs.openjdk.java.net/browse/JDK-8146668
>>> webrev: http://cr.openjdk.java.net/~amlu/8146668/webrev.01
>>> 
>>> The type of exception thrown are preserved. Custom checkIndex/checkRange 
>>> functions that throw IOOBE are now using ‘check’ utility methods provided 
>>> by java.lang.Objects (which also throws IOOBE), functions that throw other 
>>> exceptions use jdk.internal.util.Preconditions to preserve exception types, 
>>> with the help of new BiFunction vars.
>>> 
>>> I'd like to get this in JDK 9 if it's not too late, otherwise, JDK 10.
>>> 
>>> Thanks,
>>> Amy
> 

Reply via email to