dalvik_system_VMRuntime.cpp revision 2c8e25b2010d1bba4dca0148691bc6e1a4ee7616
1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dalvik.system.VMRuntime
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "Dalvik.h"
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "native/InternalNativePriv.h"
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes#include <cutils/array.h>
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include <limits.h>
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public native float getTargetHeapUtilization()
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the current ideal heap utilization, represented as a number
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * between zero and one.
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_dalvik_system_VMRuntime_getTargetHeapUtilization(
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    const u4* args, JValue* pResult)
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    UNUSED_PARAMETER(args);
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    RETURN_FLOAT(dvmGetTargetHeapUtilization());
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * native float nativeSetTargetHeapUtilization()
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Sets the current ideal heap utilization, represented as a number
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * between zero and one.  Returns the old utilization.
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Note that this is NOT static.
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_dalvik_system_VMRuntime_nativeSetTargetHeapUtilization(
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    const u4* args, JValue* pResult)
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    dvmSetTargetHeapUtilization(dvmU4ToFloat(args[1]));
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    RETURN_VOID();
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public native void runFinalizationSync()
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Does not return until any pending finalizers have been called.
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This may or may not happen in the context of the calling thread.
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * No exceptions will escape.
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Used by zygote, which doesn't have a HeapWorker thread.
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_dalvik_system_VMRuntime_runFinalizationSync(const u4* args,
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    JValue* pResult)
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    dvmRunFinalizationSync();
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    RETURN_VOID();
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
75a97ed1382c4e74704b44d366cf464bef5757c6b0Ben Cheng * public native void startJitCompilation()
766bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng *
776bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng * Callback function from the framework to indicate that an app has gone
786bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng * through the startup phase and it is time to enable the JIT compiler.
796bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng */
80a97ed1382c4e74704b44d366cf464bef5757c6b0Ben Chengstatic void Dalvik_dalvik_system_VMRuntime_startJitCompilation(const u4* args,
816bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng    JValue* pResult)
826bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng{
836bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng#if defined(WITH_JIT)
84f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng    if (gDvm.executionMode == kExecutionModeJit &&
85f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng        gDvmJit.disableJit == false) {
8696cfe6c39b91dabc78182e2f7676b27b4012886aBill Buzbee        dvmLockMutex(&gDvmJit.compilerLock);
87f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng        gDvmJit.alreadyEnabledViaFramework = true;
8896cfe6c39b91dabc78182e2f7676b27b4012886aBill Buzbee        pthread_cond_signal(&gDvmJit.compilerQueueActivity);
8996cfe6c39b91dabc78182e2f7676b27b4012886aBill Buzbee        dvmUnlockMutex(&gDvmJit.compilerLock);
9096cfe6c39b91dabc78182e2f7676b27b4012886aBill Buzbee    }
9194d89f8016b6c305ab0df491874dcedb252ecfccBill Buzbee#endif
926bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng    RETURN_VOID();
936bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng}
946bad6a2d77bcfeebf1f5a24406f49bda88503353Ben Cheng
95f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng/*
96f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng * public native void disableJitCompilation()
97f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng *
98f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng * Callback function from the framework to indicate that a VM instance wants to
99f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng * permanently disable the JIT compiler. Currently only the system server uses
100f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng * this interface when it detects system-wide safe mode is enabled.
101f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng */
102f30acbb249b137b049500f136d2bb273c0b6221aBen Chengstatic void Dalvik_dalvik_system_VMRuntime_disableJitCompilation(const u4* args,
103f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng    JValue* pResult)
104f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng{
105f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng#if defined(WITH_JIT)
106f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng    if (gDvm.executionMode == kExecutionModeJit) {
107f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng        gDvmJit.disableJit = true;
108f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng    }
109f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng#endif
110f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng    RETURN_VOID();
111f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng}
112f30acbb249b137b049500f136d2bb273c0b6221aBen Cheng
113f5949168d4142cde1582117173b03c614b632938Elliott Hughesstatic void Dalvik_dalvik_system_VMRuntime_newNonMovableArray(const u4* args,
114f5949168d4142cde1582117173b03c614b632938Elliott Hughes    JValue* pResult)
115f5949168d4142cde1582117173b03c614b632938Elliott Hughes{
116f5949168d4142cde1582117173b03c614b632938Elliott Hughes    ClassObject* elementClass = (ClassObject*) args[1];
117f5949168d4142cde1582117173b03c614b632938Elliott Hughes    int length = args[2];
118f5949168d4142cde1582117173b03c614b632938Elliott Hughes    ArrayObject* newArray;
119f5949168d4142cde1582117173b03c614b632938Elliott Hughes
120f5949168d4142cde1582117173b03c614b632938Elliott Hughes    if (elementClass == NULL) {
121d27f3cf3e7b373487f39e035fc4b55168d55c454Dan Bornstein        dvmThrowNullPointerException(NULL);
122f5949168d4142cde1582117173b03c614b632938Elliott Hughes        RETURN_VOID();
123f5949168d4142cde1582117173b03c614b632938Elliott Hughes    }
124f5949168d4142cde1582117173b03c614b632938Elliott Hughes    if (length < 0) {
1252c8e25b2010d1bba4dca0148691bc6e1a4ee7616Dan Bornstein        dvmThrowNegativeArraySizeException(length);
126f5949168d4142cde1582117173b03c614b632938Elliott Hughes        RETURN_VOID();
127f5949168d4142cde1582117173b03c614b632938Elliott Hughes    }
128f5949168d4142cde1582117173b03c614b632938Elliott Hughes
129f5949168d4142cde1582117173b03c614b632938Elliott Hughes    // TODO: right now, we don't have a copying collector, so there's no need
130f5949168d4142cde1582117173b03c614b632938Elliott Hughes    // to do anything special here, but we ought to pass the non-movability
131f5949168d4142cde1582117173b03c614b632938Elliott Hughes    // through to the allocator.
132f5949168d4142cde1582117173b03c614b632938Elliott Hughes    newArray = dvmAllocObjectArray(elementClass, length, ALLOC_DEFAULT);
133f5949168d4142cde1582117173b03c614b632938Elliott Hughes    if (newArray == NULL) {
134f5949168d4142cde1582117173b03c614b632938Elliott Hughes        assert(dvmCheckException(dvmThreadSelf()));
135f5949168d4142cde1582117173b03c614b632938Elliott Hughes        RETURN_VOID();
136f5949168d4142cde1582117173b03c614b632938Elliott Hughes    }
137f5949168d4142cde1582117173b03c614b632938Elliott Hughes    dvmReleaseTrackedAlloc((Object*) newArray, NULL);
138f5949168d4142cde1582117173b03c614b632938Elliott Hughes
139f5949168d4142cde1582117173b03c614b632938Elliott Hughes    RETURN_PTR(newArray);
140f5949168d4142cde1582117173b03c614b632938Elliott Hughes}
141f5949168d4142cde1582117173b03c614b632938Elliott Hughes
142f5949168d4142cde1582117173b03c614b632938Elliott Hughesstatic void Dalvik_dalvik_system_VMRuntime_addressOf(const u4* args,
143f5949168d4142cde1582117173b03c614b632938Elliott Hughes    JValue* pResult)
144f5949168d4142cde1582117173b03c614b632938Elliott Hughes{
145f5949168d4142cde1582117173b03c614b632938Elliott Hughes    ArrayObject* array = (ArrayObject*) args[1];
14619f4f02d096e549c1aaabdb5e8fa317588ab0bfdElliott Hughes    if (!dvmIsArray(array)) {
147d27f3cf3e7b373487f39e035fc4b55168d55c454Dan Bornstein        dvmThrowIllegalArgumentException(NULL);
14819f4f02d096e549c1aaabdb5e8fa317588ab0bfdElliott Hughes        RETURN_VOID();
14919f4f02d096e549c1aaabdb5e8fa317588ab0bfdElliott Hughes    }
15019f4f02d096e549c1aaabdb5e8fa317588ab0bfdElliott Hughes    // TODO: we should also check that this is a non-movable array.
151f5949168d4142cde1582117173b03c614b632938Elliott Hughes    s8 result = (uintptr_t) array->contents;
152f5949168d4142cde1582117173b03c614b632938Elliott Hughes    RETURN_LONG(result);
153f5949168d4142cde1582117173b03c614b632938Elliott Hughes}
154f5949168d4142cde1582117173b03c614b632938Elliott Hughes
155df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapirostatic void Dalvik_dalvik_system_VMRuntime_clearGrowthLimit(const u4* args,
156df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapiro    JValue* pResult)
157df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapiro{
158df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapiro    dvmClearGrowthLimit();
159df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapiro    RETURN_VOID();
160df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapiro}
161df9f08b877ecfd8ebadea822bb9e066ee7d30433Carl Shapiro
16249dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughesstatic void Dalvik_dalvik_system_VMRuntime_properties(const u4* args,
16349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    JValue* pResult)
16449dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes{
16549dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    char** strings = (char**) arrayUnwrap(gDvm.properties);
16649dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    int count = arraySize(gDvm.properties);
16749dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    ArrayObject* result = dvmCreateStringArray(strings, count);
16849dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    dvmReleaseTrackedAlloc((Object*) result, dvmThreadSelf());
16949dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    RETURN_PTR(result);
17049dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes}
17149dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes
17249dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughesstatic void returnCString(JValue* pResult, const char* s)
17349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes{
17449dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    Object* result = (Object*) dvmCreateStringFromCstr(s);
17549dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    dvmReleaseTrackedAlloc(result, dvmThreadSelf());
17649dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    RETURN_PTR(result);
17749dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes}
17849dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes
17949dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughesstatic void Dalvik_dalvik_system_VMRuntime_bootClassPath(const u4* args,
18049dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    JValue* pResult)
18149dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes{
18249dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    returnCString(pResult, gDvm.bootClassPathStr);
18349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes}
18449dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes
18549dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughesstatic void Dalvik_dalvik_system_VMRuntime_classPath(const u4* args,
18649dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    JValue* pResult)
18749dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes{
18849dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    returnCString(pResult, gDvm.classPathStr);
18949dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes}
19049dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes
19149dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughesstatic void Dalvik_dalvik_system_VMRuntime_vmVersion(const u4* args,
19249dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    JValue* pResult)
19349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes{
19449dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    char buf[64];
19549dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    sprintf(buf, "%d.%d.%d",
19649dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes            DALVIK_MAJOR_VERSION, DALVIK_MINOR_VERSION, DALVIK_BUG_VERSION);
19749dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    returnCString(pResult, buf);
19849dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes}
19949dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst DalvikNativeMethod dvm_dalvik_system_VMRuntime[] = {
20149dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "addressOf", "(Ljava/lang/Object;)J",
20249dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_addressOf },
20349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "bootClassPath", "()Ljava/lang/String;",
20449dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_bootClassPath },
20549dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "classPath", "()Ljava/lang/String;",
20649dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_classPath },
20749dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "clearGrowthLimit", "()V",
20849dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_clearGrowthLimit },
20949dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "disableJitCompilation", "()V",
21049dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_disableJitCompilation },
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    { "getTargetHeapUtilization", "()F",
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Dalvik_dalvik_system_VMRuntime_getTargetHeapUtilization },
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    { "nativeSetTargetHeapUtilization", "(F)V",
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Dalvik_dalvik_system_VMRuntime_nativeSetTargetHeapUtilization },
21549dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "newNonMovableArray", "(Ljava/lang/Class;I)Ljava/lang/Object;",
21649dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_newNonMovableArray },
21749dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "properties", "()[Ljava/lang/String;",
21849dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_properties },
21949dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "runFinalizationSync", "()V",
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Dalvik_dalvik_system_VMRuntime_runFinalizationSync },
221a97ed1382c4e74704b44d366cf464bef5757c6b0Ben Cheng    { "startJitCompilation", "()V",
222a97ed1382c4e74704b44d366cf464bef5757c6b0Ben Cheng        Dalvik_dalvik_system_VMRuntime_startJitCompilation },
22349dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes    { "vmVersion", "()Ljava/lang/String;",
22449dc060d5ae9bbcc78e570ec0dd244973e920fb6Elliott Hughes        Dalvik_dalvik_system_VMRuntime_vmVersion },
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    { NULL, NULL, NULL },
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project};
227