JNA中内存处理-释放动态库中分配的内存(新)
- - CSDN博客推荐文章前面已经介绍过一次JNA中内存释放方法,后经过实际分析,这样写的代码不是很优雅,实际项目中代码实现方法如下:. 如下是libvirt java binding实现代码存在内存泄露:. 如下是解决内存泄露的代码:. 作者:greencacti 发表于2012-11-16 21:56:05 原文链接.
前面已经介绍过一次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; } }