Skip to content

Commit 6415c31

Browse files
committed
Reduced memory usage
1 parent cc4b0b2 commit 6415c31

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

  • src/main/java/com/beaudoin/jmm/natives/win32

src/main/java/com/beaudoin/jmm/natives/win32/Psapi.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
package com.beaudoin.jmm.natives.win32;
2626

27+
import com.beaudoin.jmm.misc.Strings;
2728
import com.beaudoin.jmm.process.Module;
2829
import com.beaudoin.jmm.process.impl.win32.Win32Process;
2930
import com.sun.jna.Native;
@@ -48,19 +49,20 @@ public final class Psapi {
4849
Native.register(NativeLibrary.getInstance("Psapi"));
4950
}
5051

51-
public static Map<String, Module> getModules(Win32Process process) {
52-
Map<String, Module> modules = new HashMap<>();
52+
private final static WinDef.HMODULE[] lphModules = new WinDef.HMODULE[1024];
53+
private final static IntByReference lpcbNeededs = new IntByReference();
54+
private final static PsapiStdCall.LPMODULEINFO moduleInfo = new PsapiStdCall.LPMODULEINFO();
55+
private final static Map<String, Module> modules = new HashMap<>();
5356

54-
WinDef.HMODULE[] lphModules = new WinDef.HMODULE[1024];
55-
IntByReference lpcbNeededs = new IntByReference();
56-
PsapiStdCall.LPMODULEINFO moduleInfo = new PsapiStdCall.LPMODULEINFO();
57+
public static Map<String, Module> getModules(Win32Process process) {
58+
modules.clear();
5759

5860
EnumProcessModulesEx(process.pointer(), lphModules, lphModules.length, lpcbNeededs, 0x03);
5961
for (int i = 0; i < lpcbNeededs.getValue() / 4; i++) {
6062
WinDef.HMODULE hModule = lphModules[i];
6163
if (GetModuleInformation(process.pointer(), hModule, moduleInfo, moduleInfo.size())) {
6264
if (moduleInfo.lpBaseOfDll != null) {
63-
String moduleName = GetModuleBaseNameA(process.pointer(), hModule);
65+
String moduleName = Strings.transform(GetModuleBaseNameA(process.pointer(), hModule));
6466
modules.put(moduleName, new Module(process, moduleName, hModule.getPointer(), moduleInfo.SizeOfImage));
6567
}
6668
}
@@ -72,13 +74,14 @@ public static Map<String, Module> getModules(Win32Process process) {
7274

7375
public static native int GetModuleBaseNameA(Pointer hProcess, WinDef.HMODULE hModule, byte[] lpImageFileName, int nSize);
7476

75-
private static String GetModuleBaseNameA(Pointer hProcess, WinDef.HMODULE hModule) {
76-
byte[] lpImageFileName = new byte[128];
77+
private static byte[] lpImageFileName = new byte[128];
78+
79+
private static byte[] GetModuleBaseNameA(Pointer hProcess, WinDef.HMODULE hModule) {
7780
GetModuleBaseNameA(hProcess, hModule, lpImageFileName, lpImageFileName.length);
78-
return Native.toString(lpImageFileName);
81+
return lpImageFileName;
7982
}
8083

81-
public static boolean EnumProcessModulesEx(Pointer hProcess, WinDef.HMODULE[] lphModule, int cb, IntByReference lpcbNeededs, int flags) {
84+
private static boolean EnumProcessModulesEx(Pointer hProcess, WinDef.HMODULE[] lphModule, int cb, IntByReference lpcbNeededs, int flags) {
8285
return psapi.EnumProcessModulesEx(hProcess, lphModule, cb, lpcbNeededs, flags);
8386
}
8487

0 commit comments

Comments
 (0)