“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
(g_jvm)->AttachCurrentThread(&env, NULL) 后使用 (g_jvm)->DetachCurrentThread();程序报错