66import java .io .IOException ;
77import java .io .InputStream ;
88import java .io .PrintStream ;
9+ import java .lang .management .ClassLoadingMXBean ;
10+ import java .lang .management .ManagementFactory ;
11+ import java .lang .management .MemoryPoolMXBean ;
912import java .nio .file .Files ;
1013import java .util .List ;
1114import org .code .javabuilder .util .LambdaUtils ;
@@ -34,6 +37,8 @@ public class CodeExecutionManager {
3437 private PrintStream systemOutputStream ;
3538 private boolean isInitialized ;
3639
40+ private static final boolean LOG_MEMORY_USAGE = true ;
41+
3742 static class CodeBuilderRunnableFactory {
3843 public CodeBuilderRunnable createCodeBuilderRunnable (
3944 ProjectFileLoader fileLoader ,
@@ -151,6 +156,7 @@ private void onPostExecute() {
151156 LambdaUtils .safelySendMessage (
152157 this .outputAdapter , new StatusMessage (StatusMessageKey .EXITED ), false );
153158 JavabuilderContext .getInstance ().onExecutionEnded ();
159+ this .logMemoryUsage ();
154160 try {
155161 // Close custom input/output streams
156162 this .overrideInputStream .close ();
@@ -170,4 +176,26 @@ private void onPostExecute() {
170176 this .isInitialized = false ;
171177 }
172178 }
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+ }
173201}
0 commit comments