如何在Java端释放本机方法分配的内存
How to free memory allocated by native method on Java side?
我正试图将字节数组(随机数据)从本机传递到Java,我不确定这是否会导致任何内存泄漏。下面是c++代码。
JNIEXPORT jbyteArray JNICALL Java_com_sample_test_jni_TestJNI_return_1byte_1array
(JNIEnv *env, jobject obj) {
unsigned char *byteArray = new unsigned char[LENGTH];
srand(12345);
for(int i = 0;i < LENGTH;i++) {
byteArray[i] = rand() % 64;
}
jbyteArray data = (env)->NewByteArray(LENGTH);
env->SetByteArrayRegion(data, 0, LENGTH, (jbyte*)byteArray);
delete(byteArray);
return data;
}
下面是Java代码。
class TestJNI {
static {
System.loadLibrary("foobar");
}
public native byte[] return_byte_array();
public static void main(String[] args) {
byte[] data = new TestJNI().return_byte_array();
System.out.println("Data length " + data.length);
}
}
我怀疑在本机代码中分配的jbytearray是否会被Java垃圾收集。我无法在本机释放它。
还有,有没有好的文档用例子描述JNI内存管理?
Java GC应该清理您分配的所有对象。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- GlobalAlloc而不是其他分配方法
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 拥有映射的现代方法,该映射可以指向或引用已在堆栈上分配的不同类型的数据
- 使 std::vector 分配对齐内存的现代方法
- 使用同一类中的方法重新分配字段时出现问题
- 工厂方法:分配和strcpy_s的差异
- 在类中分配具有方法值的变量
- 删除类成员的动态分配内存的最佳方法是什么
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- const_cast const 方法中的"this"将"this"分配给外部变量?
- 使用类中的方法作为运算符将值分配给类的私有成员
- 释放分配给大量矢量的内存的最有效方法是什么?
- COM / DCOM:服务器存根不会为现有接口中的新方法分配内存
- 如何将 ifstream&return from 方法分配给变量?
- 这感觉有点反模式,有没有更好的方法(C++ - 分配给引用)
- 如何在Java端释放本机方法分配的内存
- 跟踪GPU内存泄漏的专业方法(分配而不释放)
- free()方法分配的内存安全吗?