我有一个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
没有“关机”!!!
太奇怪了。 任何人都可以解释一下吗?
答案 0 :(得分:0)
当垃圾收集器检测到此实例不再可访问时,任何对象都会调用finalize()
。因此finalize()
可能会因为失去可访问性而被调用,shutdown()
不需要。