因为在项目中需要调用c,用到了JNA,运行项目是没有问题的,但是跑多了程序就直接崩溃,想来想去,还是没有思路,作为Java开发,很少有自己手动释放内存的习惯,因为JVM已经替我们做了,但是利用JNA掉用的时候涉及到了C,不会自动释放内存,需要手动释放内存。在此记录此坑。以下是手动释放内存的例子。
public String getHostName() throws LibvirtException {
PointerByReference p = new PointerByReference();
Native.free(Pointer.nativeValue(p.getValue()));//手动释放内存
Pointer.nativeValue(p, 0);//避免Memory对象被GC时重复执行Nativ.free()方法
}