RFR (XXS) 8080535: (ch) Expected size of Character.UnicodeBlock.map is not optimal (original) (raw)

Martin Buchholz martinrb at google.com
Wed May 20 19:57:21 UTC 2015


I'd like to contribute (the start of) a test that checks that static HashMaps are not oversized. I suggest using that consistently for static HashMaps (and ArrayLists?) throughout the JDK:

import java.lang.reflect.; import java.util.;

@SuppressWarnings({"unchecked", "rawtypes"}) public class StaticMapSize {

static int tableLength(HashMap map) throws Throwable {
    Field tableField = HashMap.class.getDeclaredField("table");
    tableField.setAccessible(true);
    return ((Object[]) tableField.get(map)).length;
}

public static void main(String[] args) throws Throwable {
    Class<?>[] klazzes =

Class.forName("java.lang.Character").getDeclaredClasses(); for (Class<?> klazz : klazzes) { for (Field field : klazz.getDeclaredFields()) { field.setAccessible(true); if (Modifier.isStatic(field.getModifiers())) { Object x = field.get(null); if (x instanceof HashMap) { System.out.println(field); HashMap map = (HashMap) x; HashMap copy = new HashMap(map); if (tableLength(map) != tableLength(copy)) { String msg = String.format ("map %s has excess capacity: need %d; use %d%n", field.toString(), tableLength(copy), tableLength(map)); throw new AssertionError(msg); } } } } } } }



More information about the core-libs-dev mailing list