7185456: (ann) Optimize Annotation handling in java/sun.reflect.* code for small number of annotations
Reviewed-by: mduigou, jfranck
--- a/jdk/src/share/classes/sun/reflect/annotation/AnnotationType.java Wed Mar 27 09:00:34 2013 -0700
+++ b/jdk/src/share/classes/sun/reflect/annotation/AnnotationType.java Wed Mar 27 09:38:53 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -45,19 +45,18 @@
* types. This matches the return value that must be used for a
* dynamic proxy, allowing for a simple isInstance test.
*/
- private final Map<String, Class<?>> memberTypes = new HashMap<String,Class<?>>();
+ private final Map<String, Class<?>> memberTypes;
/**
* Member name -> default value mapping.
*/
- private final Map<String, Object> memberDefaults =
- new HashMap<String, Object>();
+ private final Map<String, Object> memberDefaults;
/**
* Member name -> Method object mapping. This (and its assoicated
* accessor) are used only to generate AnnotationTypeMismatchExceptions.
*/
- private final Map<String, Method> members = new HashMap<String, Method>();
+ private final Map<String, Method> members;
/**
* The retention policy for this annotation type.
@@ -105,6 +104,9 @@
}
});
+ memberTypes = new HashMap<String,Class<?>>(methods.length+1, 1.0f);
+ memberDefaults = new HashMap<String, Object>(0);
+ members = new HashMap<String, Method>(methods.length+1, 1.0f);
for (Method method : methods) {
if (method.getParameterTypes().length != 0)
@@ -117,8 +119,6 @@
Object defaultValue = method.getDefaultValue();
if (defaultValue != null)
memberDefaults.put(name, defaultValue);
-
- members.put(name, method);
}
sun.misc.SharedSecrets.getJavaLangAccess().