前面已经介绍过一次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;
}
}