概述
由于项目需要初接触JNA。
过程中遇到DLL库中malloc空间,将指针返回到JNA后需要释放DLL中malloc的空间。
考虑到DLL和JAVA程序应该是两块不同的内存空间,并且JAVA并未提供对应手动释放该类空间的方法。故在DLL中自定义free函数。通过JNA调用该free函数来释放DLL中malloc的空间。
为测试该方法是否可行,写死循环进行测试,发现占用内存依旧一直上涨,后经过了解JNA调用C函数机制为异步调用机制,所以在调用free后并不会立刻释放掉该内存。多睡一会儿就能看到内存确实有释放掉。
JAVA代码
public class JNATest {
public interface Clibrary extends Library{
Clibrary INSTANTCE = (Clibrary)Native.loadLibrary("JnaTest", Clibrary.class);
int jnaTest(PointerByReference outputString);
int jnaFree(Pointer p);
}
public static void main(String[] args) throws InterruptedException {
PointerByReference pointerOut = new PointerByReference();
while(true){
for(int i = 0;i < 10;i++) {
Clibrary.INSTANTCE.jnaTest(pointerOut);
Clibrary.INSTANTCE.jnaFree(pointerOut.getValue());
}
Thread.sleep(10000);
}
}
}
最后
以上就是要减肥刺猬为你收集整理的JNA调用DLL动态库释放动态分配的内存的全部内容,希望文章能够帮你解决JNA调用DLL动态库释放动态分配的内存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复