RFR 8081027: Create a common test to check adequacy of initial size of static HashMap/ArrayList fields
Ivan Gerasimov
ivan.gerasimov at oracle.com
Thu May 28 22:43:07 UTC 2015
Thank you Martin for looking at this!
On 27.05.2015 17:30, Martin Buchholz wrote:
> Thanks.
>
> Your methods like ofArrayList declare that they
> throw ReflectiveOperationException, but also have a try/catch to
> prevent that from ever happening.
>
Fixed!
> The assertions e.g.
> OptimalCapacity.ofArrayList(XClass.class, "theList", N)
> could look more like assertions, e.g.
> OptimalCapacity.assertOptimallySized(Class<?> clazz, String fieldName,
> int initialCapacity)
>
Good naming is one of the most difficult part of coding IMO.
The chosen names were meant to be read literally: "optimal capacity of
ArrayList", etc.
I agree, 'assert' would tell more about these methods' intention, but
I'm not sure how to include it in the names.
Maybe rename the class to AssertOptimalCapacity?
> getStorage returns the actual internal array, but you only ever need
> the length. Maybe I would have a single method
>
> static int internalArraySize(Object x) { ... }
>
Yes. I was going to compare the references, but finished comparing only
sizes.
Changed the method to internalArraySize(), as you suggested.
> "enteties" is misspelled.
>
Fixed.
> For ArrayLists, I would have been happy enough just testing that we
> have 100% utilization, i.e. size of array is the same as size of the
> List, without checking the initial capacity.
>
But then the test wouldn't have caught the "bug" in
src/java.base/share/classes/sun/security/ssl/ExtensionType.java
The ArrayList was pre-sized to 9, and after reallocation the capacity
happened to become (9 + 9/2) = 13, which by coincidence is the final
size of the List.
Please have a look at the updated webrev:
http://cr.openjdk.java.net/~igerasim/8081027/01/webrev/
Sincerely yours,
Ivan
> On Mon, May 25, 2015 at 4:07 PM, Ivan Gerasimov
> <ivan.gerasimov at oracle.com <mailto:ivan.gerasimov at oracle.com>> wrote:
>
> Hello!
>
> This is in some way continuation of JDK-8080535 (Expected size of
> Character.UnicodeBlock.map is not optimal).
>
> A new utility class OptimalCapacity was added to jdk.testlibrary
> package.
> The test NonOptimalMapSize.java that had been added with
> JDK-8080535, was rewritten with use of this new class.
> A couple more tests were added, which utilize methods of
> OptimalCapacity for checking sizes of ArrayList and
> IdentityHashMap static variables.
>
> Optimization of initial sizes of two more variables saves us one
> reallocation during java start-time and a few more bytes of memory.
>
> Would you please help review this fix?
>
> BUGURL: https://bugs.openjdk.java.net/browse/JDK-8081027
> WEBREV: http://cr.openjdk.java.net/~igerasim/8081027/00/webrev/
> <http://cr.openjdk.java.net/%7Eigerasim/8081027/00/webrev/>
>
> Sincerely yours,
> Ivan
>
>
More information about the core-libs-dev
mailing list