我是靠谱客的博主 要减肥刺猬,最近开发中收集的这篇文章主要介绍JNA调用DLL动态库释放动态分配的内存,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

由于项目需要初接触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动态库释放动态分配的内存所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部