提交 4050f67e 编写于 作者: J jrose

7030453: JSR 292 ClassValue.get method is too slow

Summary: Implement ClassValue cooperatively with Class like ThreadLocal with Thread.
Reviewed-by: twisti, mduigou
上级 d9846782
...@@ -3118,4 +3118,9 @@ public final ...@@ -3118,4 +3118,9 @@ public final
AnnotationType getAnnotationType() { AnnotationType getAnnotationType() {
return annotationType; return annotationType;
} }
/* Backing store of user-defined values pertaining to this class.
* Maintained by the ClassValue class.
*/
transient ClassValue.ClassValueMap classValueMap;
} }
...@@ -57,7 +57,7 @@ public class ClassValueTest { ...@@ -57,7 +57,7 @@ public class ClassValueTest {
} }
} }
static final Class[] CLASSES = { static final Class<?>[] CLASSES = {
String.class, String.class,
Integer.class, Integer.class,
int.class, int.class,
...@@ -69,11 +69,11 @@ public class ClassValueTest { ...@@ -69,11 +69,11 @@ public class ClassValueTest {
@Test @Test
public void testGet() { public void testGet() {
countForCV1 = 0; countForCV1 = 0;
for (Class c : CLASSES) { for (Class<?> c : CLASSES) {
assertEquals(nameForCV1(c), CV1.get(c)); assertEquals(nameForCV1(c), CV1.get(c));
} }
assertEquals(CLASSES.length, countForCV1); assertEquals(CLASSES.length, countForCV1);
for (Class c : CLASSES) { for (Class<?> c : CLASSES) {
assertEquals(nameForCV1(c), CV1.get(c)); assertEquals(nameForCV1(c), CV1.get(c));
} }
assertEquals(CLASSES.length, countForCV1); assertEquals(CLASSES.length, countForCV1);
...@@ -81,7 +81,7 @@ public class ClassValueTest { ...@@ -81,7 +81,7 @@ public class ClassValueTest {
@Test @Test
public void testRemove() { public void testRemove() {
for (Class c : CLASSES) { for (Class<?> c : CLASSES) {
CV1.get(c); CV1.get(c);
} }
countForCV1 = 0; countForCV1 = 0;
...@@ -90,7 +90,7 @@ public class ClassValueTest { ...@@ -90,7 +90,7 @@ public class ClassValueTest {
CV1.remove(CLASSES[i]); CV1.remove(CLASSES[i]);
} }
assertEquals(0, countForCV1); // no change assertEquals(0, countForCV1); // no change
for (Class c : CLASSES) { for (Class<?> c : CLASSES) {
assertEquals(nameForCV1(c), CV1.get(c)); assertEquals(nameForCV1(c), CV1.get(c));
} }
assertEquals(REMCOUNT, countForCV1); assertEquals(REMCOUNT, countForCV1);
...@@ -120,7 +120,7 @@ public class ClassValueTest { ...@@ -120,7 +120,7 @@ public class ClassValueTest {
for (int pass = 0; pass <= 2; pass++) { for (int pass = 0; pass <= 2; pass++) {
for (int i1 = 0; i1 < CVN_COUNT1; i1++) { for (int i1 = 0; i1 < CVN_COUNT1; i1++) {
eachClass: eachClass:
for (Class c : CLASSES) { for (Class<?> c : CLASSES) {
for (int i2 = 0; i2 < CVN_COUNT2; i2++) { for (int i2 = 0; i2 < CVN_COUNT2; i2++) {
int n = i1*CVN_COUNT2 + i2; int n = i1*CVN_COUNT2 + i2;
assertEquals(0, countForCVN); assertEquals(0, countForCVN);
...@@ -152,8 +152,10 @@ public class ClassValueTest { ...@@ -152,8 +152,10 @@ public class ClassValueTest {
} }
} }
assertEquals(countForCVN, 0); assertEquals(countForCVN, 0);
for (int n = 0; n < cvns.length; n++) { System.out.println("[rechecking values]");
for (Class c : CLASSES) { for (int i = 0; i < cvns.length * 10; i++) {
int n = i % cvns.length;
for (Class<?> c : CLASSES) {
assertEquals(nameForCVN(c, n), cvns[n].get(c)); assertEquals(nameForCVN(c, n), cvns[n].get(c));
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册