前面已经介绍过一次JNA中内存释放方法,后经过实际分析,这样写的代码不是很优雅,实际项目中代码实现方法如下:
如下是libvirt java binding实现代码存在内存泄露:
Libvirt.java
public String virConnectGetHostname(ConnectionPointer virConnectPtr);Connect.java
public String getHostName() throws LibvirtException {
String returnValue = libvirt.virConnectGetHostname(VCP);
processError();
return returnValue;
}如下是解决内存泄露的代码:
Libvirt.java
public Pointer virConnectGetHostname(ConnectionPointer virConnectPtr);Connect.java
public String getHostName() throws LibvirtException {
Pointer returnValue = libvirt.virConnectGetHostname(VCP);
processError();
if(returnValue == null) {
return "";
}
else {
String result = returnValue.getString(0);
Native.free(Pointer.nativeValue(returnValue));
return result;
}
}
本文讨论了在使用LibvirtJavaBinding时遇到的内存泄露问题,并提供了修改后的代码实现,有效解决了内存泄露的问题。
2962





