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的实例.

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的实例.
经验分享 程序员 微信小程序 职场和发展