summaryrefslogtreecommitdiffstats
path: root/vm
diff options
context:
space:
mode:
authorCarl Shapiro <cshapiro@google.com>2011-04-27 19:14:33 -0700
committerCarl Shapiro <cshapiro@google.com>2011-04-27 19:17:45 -0700
commit52e2626eb3bf620c53459a90d912733de2ce0369 (patch)
tree8dae907c264e23154835815ae534274871d1b348 /vm
parent5cdd4a3f91d3fc25c8eeca8f58e35bb6c4e908ca (diff)
downloadandroid_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.h1
-rw-r--r--vm/native/dalvik_system_VMRuntime.cpp2
-rw-r--r--vm/oo/Array.cpp2
-rw-r--r--vm/oo/Class.cpp6
-rw-r--r--vm/reflect/Proxy.cpp2
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);