java 调用dll内存泄露_java-JNA内存泄漏-如何解决?

public static User32 USER32_INSTANCE = (User32) Native.loadLibrary("user32", User32.class);

user32 = USER32_INSTANCE;

user32.EnumWindows((hWnd, arg) -> {

int size = 1024 * 8;

char[] buffer = new char[size];

USER32_INSTANCE.GetWindowTextW(hWnd, buffer, size);

char[] buffer2 = new char[size];

PointerByReference pointer = new PointerByReference();

User32DLL.GetWindowThreadProcessId(hWnd, pointer);

Pointer process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, false, pointer.getValue());

Psapi.GetModuleBaseNameW(process, null, buffer2, size);

String result = Native.toString(buffer).trim();

String proc = Native.toString(buffer2).trim();

// ... (non-JNA stuff)

}

从大学开始我就没有接触过C/C++,老实说,我不知道如何在这里释放内存:(

我知道内存泄漏-我对YourKit进行了性能分析,并跟踪了此代码块的内存泄漏(特别是,它似乎在GetWindowTextW调用和Native.toString()调用中泄漏).有人可以给我一个例子,说明如何正确释放正在使用的任何内存块吗?

我看到Pointer有一个clear()方法,我应该使用它吗?但是我不知道如何获取大小(清除需要一个长度参数).我还看到,有一个Memory类型可以将Pointer子类化,但是根据instanceof,我现在所拥有的Pointer实际上都不是该Pointer的实例.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值