Support time measurement
This commit is contained in:
@@ -6,8 +6,10 @@ import java.util.Arrays;
|
|||||||
|
|
||||||
public class Preloader {
|
public class Preloader {
|
||||||
|
|
||||||
|
public static final int PRELOADER_ARG_COUNT = 4;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
if (args.length < 3) {
|
if (args.length < PRELOADER_ARG_COUNT) {
|
||||||
printUsageAndExit();
|
printUsageAndExit();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -29,6 +31,9 @@ public class Preloader {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean printTime = parseMeasureTime(args[3]);
|
||||||
|
long startTime = System.nanoTime();
|
||||||
|
|
||||||
ClassLoader parent = Preloader.class.getClassLoader();
|
ClassLoader parent = Preloader.class.getClassLoader();
|
||||||
|
|
||||||
ClassLoader preloaded = ClassPreloadingUtils.preloadClasses(file, classNumber, parent);
|
ClassLoader preloaded = ClassPreloadingUtils.preloadClasses(file, classNumber, parent);
|
||||||
@@ -36,11 +41,24 @@ public class Preloader {
|
|||||||
Class<?> mainClass = preloaded.loadClass(mainClassCanonicalName);
|
Class<?> mainClass = preloaded.loadClass(mainClassCanonicalName);
|
||||||
Method mainMethod = mainClass.getMethod("main", String[].class);
|
Method mainMethod = mainClass.getMethod("main", String[].class);
|
||||||
|
|
||||||
mainMethod.invoke(0, new Object[] {Arrays.copyOfRange(args, 2, args.length)});
|
mainMethod.invoke(0, new Object[] {Arrays.copyOfRange(args, PRELOADER_ARG_COUNT, args.length)});
|
||||||
|
|
||||||
|
if (printTime) {
|
||||||
|
long dt = System.nanoTime() - startTime;
|
||||||
|
System.out.format("Total time: %.3fs\n", dt / 1e9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean parseMeasureTime(String arg) {
|
||||||
|
if ("time".equals(arg)) return true;
|
||||||
|
if ("notime".equals(arg)) return true;
|
||||||
|
System.out.println("Unrecognized argument: " + arg);
|
||||||
|
printUsageAndExit();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void printUsageAndExit() {
|
private static void printUsageAndExit() {
|
||||||
System.out.println("Usage: Preloader <path to jar> <main class> <class number estimate> <parameters to pass to the main class>");
|
System.out.println("Usage: Preloader <path to jar> <main class> <class number estimate> <parameters to pass to the main class> <time|notime>");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user