Skip to content

Commit 898096f

Browse files
authored
Merge pull request #365 from code-dot-org/molly-add-reflection-access
Add reflection access for validation
2 parents 431941c + aad2611 commit 898096f

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

org-code-javabuilder/lib/src/main/java/org/code/javabuilder/UserClassLoader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,6 @@ private boolean isInAllowedPackage(String[] allowedPackageList, String name) {
138138
};
139139

140140
// Allowed packages for code with elevated permissions, such as validation code.
141-
private static final String[] validatorAllowedPackages = new String[] {"org.code.validation"};
141+
private static final String[] validatorAllowedPackages =
142+
new String[] {"org.code.validation", "java.lang.reflect"};
142143
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.code.javabuilder.util;
2+
3+
import java.lang.management.ClassLoadingMXBean;
4+
import java.lang.management.ManagementFactory;
5+
import java.lang.management.MemoryPoolMXBean;
6+
import java.util.List;
7+
import org.code.protocol.LoggerUtils;
8+
9+
public class ProfilingUtils {
10+
private ProfilingUtils() {
11+
throw new UnsupportedOperationException("Instantiation of utility class is not allowed.");
12+
}
13+
14+
/*
15+
Log current and peak memory usage across all memory pools. Also log currently loaded and unload class counts.
16+
*/
17+
public static void logMemoryUsage() {
18+
List<MemoryPoolMXBean> memoryPoolMXBeans = ManagementFactory.getMemoryPoolMXBeans();
19+
for (MemoryPoolMXBean memoryPoolMXBean : memoryPoolMXBeans) {
20+
String usageMessage =
21+
String.format(
22+
"Memory pool %s\n\t Usage: %d\n\tPeak Usage %d",
23+
memoryPoolMXBean.getName(),
24+
memoryPoolMXBean.getUsage().getUsed(),
25+
memoryPoolMXBean.getPeakUsage().getUsed());
26+
LoggerUtils.logInfo(usageMessage);
27+
}
28+
ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
29+
String classLoadingMessage =
30+
String.format(
31+
"Loaded classes: %d, Unloaded classes: %d",
32+
classLoadingMXBean.getLoadedClassCount(), classLoadingMXBean.getUnloadedClassCount());
33+
LoggerUtils.logInfo(classLoadingMessage);
34+
}
35+
}

0 commit comments

Comments
 (0)