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

问题描述 投票:0回答:1

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

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

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

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

java c++ java-native-interface
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.