Remove arrayClass from ClassObject. It seems to get only dozens of hits in
all of Zygote start-up.
There doesn't seem to be a measurable difference in the time printed in:
I/Zygote ( 2247): ...preloaded 1147 classes in NNNNms.
diff --git a/vm/mterp/common/asm-constants.h b/vm/mterp/common/asm-constants.h
index c5a6baa..6046bb3 100644
--- a/vm/mterp/common/asm-constants.h
+++ b/vm/mterp/common/asm-constants.h
@@ -257,9 +257,9 @@
MTERP_OFFSET(offClassObject_accessFlags, ClassObject, accessFlags, 32)
MTERP_OFFSET(offClassObject_pDvmDex, ClassObject, pDvmDex, 40)
MTERP_OFFSET(offClassObject_status, ClassObject, status, 44)
-MTERP_OFFSET(offClassObject_super, ClassObject, super, 76)
-MTERP_OFFSET(offClassObject_vtableCount, ClassObject, vtableCount, 116)
-MTERP_OFFSET(offClassObject_vtable, ClassObject, vtable, 120)
+MTERP_OFFSET(offClassObject_super, ClassObject, super, 72)
+MTERP_OFFSET(offClassObject_vtableCount, ClassObject, vtableCount, 112)
+MTERP_OFFSET(offClassObject_vtable, ClassObject, vtable, 116)
/* InterpEntry enumeration */
MTERP_SIZEOF(sizeofClassStatus, InterpEntry, MTERP_SMALL_ENUM)
diff --git a/vm/oo/Array.c b/vm/oo/Array.c
index 19a0f96..60da683 100644
--- a/vm/oo/Array.c
+++ b/vm/oo/Array.c
@@ -104,21 +104,13 @@
assert(elemClassObj != NULL);
- if (elemClassObj->arrayClass != NULL) {
- arrayClass = elemClassObj->arrayClass;
- LOGVV("using cached '%s' class for '%s'\n",
- arrayClass->descriptor, elemClassObj->descriptor);
- } else {
- /* Simply prepend "[" to the descriptor. */
- int nameLen = strlen(elemClassObj->descriptor);
- char className[nameLen + 2];
+ /* Simply prepend "[" to the descriptor. */
+ int nameLen = strlen(elemClassObj->descriptor);
+ char className[nameLen + 2];
- className[0] = '[';
- memcpy(className+1, elemClassObj->descriptor, nameLen+1);
- arrayClass = dvmFindArrayClass(className, elemClassObj->classLoader);
- if (arrayClass != NULL)
- elemClassObj->arrayClass = arrayClass;
- }
+ className[0] = '[';
+ memcpy(className+1, elemClassObj->descriptor, nameLen+1);
+ arrayClass = dvmFindArrayClass(className, elemClassObj->classLoader);
return arrayClass;
}
@@ -708,4 +700,3 @@
dvmMarkObject((Object *)gDvm.primitiveClass[i]); // may be NULL
}
}
-
diff --git a/vm/oo/Object.h b/vm/oo/Object.h
index 298c230..ba2d9bb 100644
--- a/vm/oo/Object.h
+++ b/vm/oo/Object.h
@@ -378,9 +378,6 @@
(for String[][][], this will be String) */
ClassObject* elementClass;
- /* class object representing an array of this class; set on first use */
- ClassObject* arrayClass;
-
/* arrays only: number of dimensions, e.g. int[][] is 2 */
int arrayDim;