Support done() in class handler
This commit is contained in:
@@ -35,6 +35,8 @@ public class ClassPreloadingUtils {
|
|||||||
|
|
||||||
public void beforeLoadJar(File jarFile) {}
|
public void beforeLoadJar(File jarFile) {}
|
||||||
public void afterLoadJar(File jarFile) {}
|
public void afterLoadJar(File jarFile) {}
|
||||||
|
|
||||||
|
public void done() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -44,17 +44,9 @@ public class Preloader {
|
|||||||
|
|
||||||
ClassLoader parent = Preloader.class.getClassLoader();
|
ClassLoader parent = Preloader.class.getClassLoader();
|
||||||
|
|
||||||
final int[] counter = new int[1];
|
ClassPreloadingUtils.ClassHandler handler = getHandler(printTime);
|
||||||
final int[] size = new int[1];
|
ClassLoader preloaded = ClassPreloadingUtils.preloadClasses(files, classNumber, parent, handler);
|
||||||
ClassLoader preloaded = ClassPreloadingUtils.preloadClasses(files, classNumber, parent,
|
handler.done();
|
||||||
!printTime ? null :
|
|
||||||
new ClassPreloadingUtils.ClassHandler() {
|
|
||||||
@Override
|
|
||||||
public void beforeDefineClass(String name, int sizeInBytes) {
|
|
||||||
counter[0]++;
|
|
||||||
size[0] += sizeInBytes;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Class<?> mainClass = preloaded.loadClass(mainClassCanonicalName);
|
Class<?> mainClass = preloaded.loadClass(mainClassCanonicalName);
|
||||||
Method mainMethod = mainClass.getMethod("main", String[].class);
|
Method mainMethod = mainClass.getMethod("main", String[].class);
|
||||||
@@ -66,10 +58,28 @@ public class Preloader {
|
|||||||
if (printTime) {
|
if (printTime) {
|
||||||
long dt = System.nanoTime() - startTime;
|
long dt = System.nanoTime() - startTime;
|
||||||
System.out.format("Total time: %.3fs\n", dt / 1e9);
|
System.out.format("Total time: %.3fs\n", dt / 1e9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ClassPreloadingUtils.ClassHandler getHandler(boolean printTime) {
|
||||||
|
if (printTime) return new ClassPreloadingUtils.ClassHandler() {};
|
||||||
|
|
||||||
|
final int[] counter = new int[1];
|
||||||
|
final int[] size = new int[1];
|
||||||
|
return new ClassPreloadingUtils.ClassHandler() {
|
||||||
|
@Override
|
||||||
|
public void beforeDefineClass(String name, int sizeInBytes) {
|
||||||
|
counter[0]++;
|
||||||
|
size[0] += sizeInBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void done() {
|
||||||
System.out.println("Loaded classes: " + counter[0]);
|
System.out.println("Loaded classes: " + counter[0]);
|
||||||
System.out.println("Loaded classes size: " + size[0]);
|
System.out.println("Loaded classes size: " + size[0]);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean parseMeasureTime(String arg) {
|
private static boolean parseMeasureTime(String arg) {
|
||||||
|
|||||||
Reference in New Issue
Block a user