diff options
| author | Carl Shapiro <cshapiro@google.com> | 2011-04-27 19:14:33 -0700 |
|---|---|---|
| committer | Carl Shapiro <cshapiro@google.com> | 2011-04-27 19:17:45 -0700 |
| commit | 52e2626eb3bf620c53459a90d912733de2ce0369 (patch) | |
| tree | 8dae907c264e23154835815ae534274871d1b348 /vm | |
| parent | 5cdd4a3f91d3fc25c8eeca8f58e35bb6c4e908ca (diff) | |
| download | android_dalvik-52e2626eb3bf620c53459a90d912733de2ce0369.tar.gz android_dalvik-52e2626eb3bf620c53459a90d912733de2ce0369.tar.bz2 android_dalvik-52e2626eb3bf620c53459a90d912733de2ce0369.zip | |
Add a non-moving option to dvmMalloc and make use of it.
At present, class objects, non-moving arrays, and interned strings have
location dependencies in native code. Allocating non-moving is a no-op
for the present heap, but this option will have an effect after the
copying collector is integrated.
Change-Id: I674f83a086ac65db303baab0599831f80f52a4a5
Diffstat (limited to 'vm')
| -rw-r--r-- | vm/alloc/Alloc.h | 1 | ||||
| -rw-r--r-- | vm/native/dalvik_system_VMRuntime.cpp | 2 | ||||
| -rw-r--r-- | vm/oo/Array.cpp | 2 | ||||
| -rw-r--r-- | vm/oo/Class.cpp | 6 | ||||
| -rw-r--r-- | vm/reflect/Proxy.cpp | 2 |
5 files changed, 7 insertions, 6 deletions
diff --git a/vm/alloc/Alloc.h b/vm/alloc/Alloc.h index 6637cd696..c215fc2b3 100644 --- a/vm/alloc/Alloc.h +++ b/vm/alloc/Alloc.h @@ -25,6 +25,7 @@ enum { ALLOC_DEFAULT = 0x00, ALLOC_DONT_TRACK = 0x01, /* don't add to internal tracking list */ + ALLOC_NON_MOVING = 0x02, }; /* diff --git a/vm/native/dalvik_system_VMRuntime.cpp b/vm/native/dalvik_system_VMRuntime.cpp index b704e3e36..7345386d6 100644 --- a/vm/native/dalvik_system_VMRuntime.cpp +++ b/vm/native/dalvik_system_VMRuntime.cpp @@ -113,7 +113,7 @@ static void Dalvik_dalvik_system_VMRuntime_newNonMovableArray(const u4* args, ClassObject* arrayClass = dvmFindArrayClassForElement(elementClass); ArrayObject* newArray = dvmAllocArrayByClass(arrayClass, length, - ALLOC_DEFAULT); + ALLOC_NON_MOVING); if (newArray == NULL) { assert(dvmCheckException(dvmThreadSelf())); RETURN_VOID(); diff --git a/vm/oo/Array.cpp b/vm/oo/Array.cpp index e186edf43..baf9d3c81 100644 --- a/vm/oo/Array.cpp +++ b/vm/oo/Array.cpp @@ -363,7 +363,7 @@ static ClassObject* createArrayClass(const char* descriptor, Object* loader) * Array classes are simple enough that we don't need to do a full * link step. */ - newClass = (ClassObject*) dvmMalloc(sizeof(*newClass), ALLOC_DEFAULT); + newClass = (ClassObject*) dvmMalloc(sizeof(*newClass), ALLOC_NON_MOVING); if (newClass == NULL) return NULL; DVM_OBJECT_INIT(&newClass->obj, gDvm.classJavaLangClass); diff --git a/vm/oo/Class.cpp b/vm/oo/Class.cpp index 2311f8a00..15511c2f9 100644 --- a/vm/oo/Class.cpp +++ b/vm/oo/Class.cpp @@ -341,7 +341,7 @@ static bool createPrimitiveType(PrimitiveType primitiveType, ClassObject** pClas const char* descriptor = dexGetPrimitiveTypeDescriptor(primitiveType); assert(descriptor != NULL); - ClassObject* newClass = (ClassObject*) dvmMalloc(sizeof(*newClass), ALLOC_DEFAULT); + ClassObject* newClass = (ClassObject*) dvmMalloc(sizeof(*newClass), ALLOC_NON_MOVING); if (newClass == NULL) { return false; } @@ -375,7 +375,7 @@ static bool createInitialClasses() { * because it is an instance of itself. */ ClassObject* clazz = (ClassObject*) - dvmMalloc(classObjectSize(CLASS_SFIELD_SLOTS), ALLOC_DEFAULT); + dvmMalloc(classObjectSize(CLASS_SFIELD_SLOTS), ALLOC_NON_MOVING); if (clazz == NULL) { return false; } @@ -1766,7 +1766,7 @@ static ClassObject* loadClassFromDex0(DvmDex* pDvmDex, newClass = gDvm.classJavaLangClass; } else { size_t size = classObjectSize(pHeader->staticFieldsSize); - newClass = (ClassObject*) dvmMalloc(size, ALLOC_DEFAULT); + newClass = (ClassObject*) dvmMalloc(size, ALLOC_NON_MOVING); } if (newClass == NULL) return NULL; diff --git a/vm/reflect/Proxy.cpp b/vm/reflect/Proxy.cpp index 59d3d47aa..6953930a8 100644 --- a/vm/reflect/Proxy.cpp +++ b/vm/reflect/Proxy.cpp @@ -105,7 +105,7 @@ ClassObject* dvmGenerateProxyClass(StringObject* str, ArrayObject* interfaces, size_t newClassSize = sizeof(ClassObject) + kProxySFieldCount * sizeof(StaticField); ClassObject* newClass = - (ClassObject*) dvmMalloc(newClassSize, ALLOC_DEFAULT); + (ClassObject*) dvmMalloc(newClassSize, ALLOC_NON_MOVING); if (newClass == NULL) goto bail; DVM_OBJECT_INIT(&newClass->obj, gDvm.classJavaLangClass); |
