JNI方法自动执行

时间:2015-06-18 16:15:21

标签: java android java-native-interface

我有一个JNI方法如下:

JNIEXPORT void JNICALL Java_com_test_Test_finalize
(JNIEnv *env, jobject self) {
  LOGD("finalize TID:%d", gettid());
  // write out the trailer and clean up
  _finalize(br_ctx);
}

java Test class中的方法:

public native void finalize();

我确信有一个地方可以调用Test#finalize():

private void shutdown() {
    Log.e(TAG, "Shutting down");
    test.finalize();
}

日志:

(24917): finalize TID:24926

没有“关机”!!!

太奇怪了。 任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

当垃圾收集器检测到此实例不再可访问时,任何对象都会调用finalize()。因此finalize()可能会因为失去可访问性而被调用,shutdown()不需要。