【问题标题】:Will function result passed as parameter be released in JNI?作为参数传递的函数结果会在JNI中释放吗?
【发布时间】:2012-06-19 08:56:52
【问题描述】:

所以我的问题是关于 JNI 中的内存泄漏。

如果我有:

jclass cls = env->FindClass("java/lang/String");
jobjectArray aRow = env->NewObjectArray(col, cls, NULL);
env->DeleteLocalRef(cls);

我知道 cls 内存将被释放。但是,如果我使用:

jobjectArray aRow = env->NewObjectArray(col, env->FindClass("java/lang/String"), NULL);

作为参数传递的jclass会被释放吗?

【问题讨论】:

    标签: java memory-management java-native-interface


    【解决方案1】:

    是的,但不是立即,只有在您当前的 JNI 方法返回给 JVM 调用者之后。然后 GC 会处理它。只要您创建适量的引用,这应该不是问题。当您的金额不再适中时,JVM 会告诉您。

    但是,为了完全正确,您应该在将FindClass 的返回值用作其他地方的参数之前检查它。如果 JVM 抛出异常,它仍然可以返回 NULL。

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多