6
6
import java .io .IOException ;
7
7
import java .io .InputStream ;
8
8
import java .io .PrintStream ;
9
+ import java .lang .management .ClassLoadingMXBean ;
10
+ import java .lang .management .ManagementFactory ;
11
+ import java .lang .management .MemoryPoolMXBean ;
9
12
import java .nio .file .Files ;
10
13
import java .util .List ;
11
14
import org .code .javabuilder .util .LambdaUtils ;
@@ -34,6 +37,8 @@ public class CodeExecutionManager {
34
37
private PrintStream systemOutputStream ;
35
38
private boolean isInitialized ;
36
39
40
+ private static final boolean LOG_MEMORY_USAGE = true ;
41
+
37
42
static class CodeBuilderRunnableFactory {
38
43
public CodeBuilderRunnable createCodeBuilderRunnable (
39
44
ProjectFileLoader fileLoader ,
@@ -151,6 +156,7 @@ private void onPostExecute() {
151
156
LambdaUtils .safelySendMessage (
152
157
this .outputAdapter , new StatusMessage (StatusMessageKey .EXITED ), false );
153
158
JavabuilderContext .getInstance ().onExecutionEnded ();
159
+ this .logMemoryUsage ();
154
160
try {
155
161
// Close custom input/output streams
156
162
this .overrideInputStream .close ();
@@ -170,4 +176,26 @@ private void onPostExecute() {
170
176
this .isInitialized = false ;
171
177
}
172
178
}
179
+
180
+ private void logMemoryUsage () {
181
+ if (LOG_MEMORY_USAGE ) {
182
+ List <MemoryPoolMXBean > memoryPoolMXBeans = ManagementFactory .getMemoryPoolMXBeans ();
183
+ for (MemoryPoolMXBean memoryPoolMXBean : memoryPoolMXBeans ) {
184
+ String usageMessage =
185
+ String .format (
186
+ "Memory pool %s\n \t Usage: %d\n \t Peak Usage %d" ,
187
+ memoryPoolMXBean .getName (),
188
+ memoryPoolMXBean .getUsage ().getUsed (),
189
+ memoryPoolMXBean .getPeakUsage ().getUsed ());
190
+ LoggerUtils .logInfo (usageMessage );
191
+ }
192
+ ClassLoadingMXBean classLoadingMXBean = ManagementFactory .getClassLoadingMXBean ();
193
+ String classLoadingMessage =
194
+ String .format (
195
+ "Loaded classes: %d, Unloaded classes: %d" ,
196
+ classLoadingMXBean .getLoadedClassCount (), classLoadingMXBean .getUnloadedClassCount ());
197
+ LoggerUtils .logInfo (classLoadingMessage );
198
+ System .out .println (classLoadingMessage );
199
+ }
200
+ }
173
201
}
0 commit comments