“DetachCurrentThread”是否清除了本地引用?

时间:2017-12-15 14:34:51

标签: java c++ java-native-interface

我有一个使用Java Native Interface调用JVM的程序。该程序是一个服务器。它必须处理多个请求并在很长一段时间内保持在线状态。

为了避免本地引用导致的内存泄漏,我发现在单线程实现中,我可以在处理每个请求之前调用PushLocalFrame,并在处理每个请求后调用PopLocalFrame,以便本地引用被清除了。

现在,我想同时处理多个请求。我计划在处理每个请求之前调用AttachCurrentThread,并在处理每个请求后调用DetachCurrentThread,为每个请求使用不同的$(document).on("click", "#a-div-id", function(e) {...});

我的问题是:我是否还必须在处理每个请求之前和之后调用JNIEnv / PushLocalFrame,或者PopLocalFrame已经清除了本地引用?我找不到任何相关的文档。

1 个答案:

答案 0 :(得分:0)

当线程分离时,没有必要弹出本地帧:

  

如果使用AttachCurrentThread附加本机线程,则运行的代码将永远不会自动释放本地引用,直到线程分离

来源:"JNI Tips - Local and Global References"