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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“DetachCurrentThread”是否清除了本地引用?相关的知识,希望对你有一定的参考价值。

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

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

现在,我想同时处理多个请求。我打算在处理每个请求之前调用AttachCurrentThread,并在处理每个请求后调用DetachCurrentThread,为每个请求使用不同的JNIEnv

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

答案

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

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

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

以上是关于“DetachCurrentThread”是否清除了本地引用?的主要内容,如果未能解决你的问题,请参考以下文章

Android JNI - 调用AttachCurrentThread而不使用DetachCurrentThread

DetachCurrentThread有时会在NDK中崩溃

(g_jvm)->AttachCurrentThread(&env, NULL) 后使用 (g_jvm)->DetachCurrentThread();程序报错

是否需要清除 STL 向量

phantomjs是否会定期自动清除缓存?

使用requestAnimationFrame polyfill时是否需要清除超时?