我有一个使用Java Native Interface调用JVM的程序。该程序是一个服务器。它必须处理多个请求并在很长一段时间内保持在线状态。
为了避免本地引用导致的内存泄漏,我发现在单线程实现中,我可以在处理每个请求之前调用PushLocalFrame
,并在处理每个请求后调用PopLocalFrame
,以便本地引用被清除了。
现在,我想同时处理多个请求。我计划在处理每个请求之前调用AttachCurrentThread
,并在处理每个请求后调用DetachCurrentThread
,为每个请求使用不同的$(document).on("click", "#a-div-id", function(e) {...});
。
我的问题是:我是否还必须在处理每个请求之前和之后调用JNIEnv
/ PushLocalFrame
,或者PopLocalFrame
已经清除了本地引用?我找不到任何相关的文档。
答案 0 :(得分:0)
当线程分离时,没有必要弹出本地帧:
如果使用AttachCurrentThread附加本机线程,则运行的代码将永远不会自动释放本地引用,直到线程分离