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
- Previous message: RFR (XXS) 8080535: (ch) Expected size of Character.UnicodeBlock.map is not optimal
- Next message: RFR (XXS) 8080535: (ch) Expected size of Character.UnicodeBlock.map is not optimal
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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); } } } } } } }
- Previous message: RFR (XXS) 8080535: (ch) Expected size of Character.UnicodeBlock.map is not optimal
- Next message: RFR (XXS) 8080535: (ch) Expected size of Character.UnicodeBlock.map is not optimal
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]