Java Android本机:无法在本机层下分配大内存

Java Android本机:无法在本机层下分配大内存,java,android,c++,c,memory,Java,Android,C++,C,Memory,正如我所知,Android限制了一个进程的java堆大小。但若我们在本机层下进行分配,我们可以分配任意数量的内存(除非它大于可用内存) 所以,我正在为此写一个测试 首先,我创建了可以分配的最大内存: ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE); int realAllowMemory = am.getMemoryClass(); 其次,我分配一个本机内存,大小如下: JNIEXPORT

正如我所知,Android限制了一个进程的java堆大小。但若我们在本机层下进行分配,我们可以分配任意数量的内存(除非它大于可用内存)

所以,我正在为此写一个测试

首先,我创建了可以分配的最大内存:

 ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
 int realAllowMemory = am.getMemoryClass();
其次,我分配一个本机内存,大小如下:

JNIEXPORT jbyteArray JNICALL
Java_memory_hqt_com_heapsizetesting_jnitest_JNIActivity_getBigDataFromJni(JNIEnv *env, jobject instance, jint memory) {
     jbyteArray ret = (*env)->NewByteArray(env, memory);
     return ret;
}
我将通过以下方式调用此方法:

    public native byte[] getBigDataFromJni(int memory);


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getBigDataFromJni(realAllowMemory * 1000 * 1000);
    }
但当我这样做时,我会遇到例外情况:

JNI在应用程序中检测到错误:使用调用JNI NewByteArray 字节[]中引发的挂起异常“java.lang.OutOfMemoryError” memory.hqt.com.heapsizetesting.jnitest.JNIActivity.getBigDataFromJni(int):-2


虽然在我测试时,
reallallowmemory
大约是256MB,但可用内存大约是1000MB。请在这一点上为我解释。

您在本机部分调用Java分配方法。它具有与java代码相同的限制。为了避免这种情况,请使用本机分配函数,例如
malloc()

您正在本机部分中调用Java分配方法。它具有与java代码相同的限制。为了避免这种情况,请使用本机分配函数,例如
malloc()

非常感谢:D您能告诉我如何在java层上释放对象吗?谢谢:“你的意思是,如何从java调用
free()
?你可以用jni方法包装
free()
调用,就像
malloc()
call一样。非常感谢:你能告诉我如何在java层释放对象吗?谢谢:”你的意思是,如何从java调用
free()
?您可以使用jni方法包装
free()
调用,就像
malloc()
调用一样