JNA中内存处理-释放动态库中分配的内存(新)

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



作者:greencacti 发表于2012-11-16 21:56:05 原文链接
阅读:32 评论:0 查看评论

你可能感兴趣的:(jna,内存,释放)