# HG changeset patch # User Stefan Anzinger # Date 1429108245 -7200 # Node ID f61ff7f01bc2e7039771d0081d9784ba7d16793e # Parent 05a2b72c071fc7a89257ad2157e8f9c00642a671 Add CompileTheWorldExcludeMethodFilter to CTW and remove sun.awt.X11 classes from default ctw mx target. diff -r 05a2b72c071f -r f61ff7f01bc2 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Wed Apr 15 13:49:38 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/CompileTheWorldTest.java Wed Apr 15 16:30:45 2015 +0200 @@ -40,7 +40,7 @@ boolean originalSetting = ExitVMOnException.getValue(); // Compile a couple classes in rt.jar String file = System.getProperty("java.home") + "/lib/rt.jar"; - new CompileTheWorld(file, new Config(null), 1, 5, null, false).compile(); + new CompileTheWorld(file, new Config(null), 1, 5, null, null, false).compile(); ExitVMOnException.setValue(originalSetting); } diff -r 05a2b72c071f -r f61ff7f01bc2 graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java --- a/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Wed Apr 15 13:49:38 2015 +0200 +++ b/graal/com.oracle.graal.hotspot.test/src/com/oracle/graal/hotspot/test/MemoryUsageBenchmark.java Wed Apr 15 16:30:45 2015 +0200 @@ -180,7 +180,7 @@ compileAndTime("complex"); if (CompileTheWorldClasspath.getValue() != SUN_BOOT_CLASS_PATH) { CompileTheWorld ctw = new CompileTheWorld(CompileTheWorldClasspath.getValue(), new Config(CompileTheWorldConfig.getValue()), CompileTheWorldStartAt.getValue(), - CompileTheWorldStopAt.getValue(), CompileTheWorldMethodFilter.getValue(), CompileTheWorldVerbose.getValue()); + CompileTheWorldStopAt.getValue(), CompileTheWorldMethodFilter.getValue(), CompileTheWorldExcludeMethodFilter.getValue(), CompileTheWorldVerbose.getValue()); try { ctw.compile(); } catch (Throwable e) { diff -r 05a2b72c071f -r f61ff7f01bc2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Wed Apr 15 13:49:38 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/CompileTheWorld.java Wed Apr 15 16:30:45 2015 +0200 @@ -70,6 +70,8 @@ public static final OptionValue CompileTheWorldIterations = new OptionValue<>(1); @Option(help = "Only compile methods matching this filter", type = OptionType.Debug) public static final OptionValue CompileTheWorldMethodFilter = new OptionValue<>(null); + @Option(help = "Exclude methods matching this filter from compilation", type = OptionType.Debug) + public static final OptionValue CompileTheWorldExcludeMethodFilter = new OptionValue<>(null); @Option(help = "First class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug) public static final OptionValue CompileTheWorldStartAt = new OptionValue<>(1); @Option(help = "Last class to consider when using -XX:+CompileTheWorld", type = OptionType.Debug) @@ -158,6 +160,9 @@ /** Only compile methods matching one of the filters in this array if the array is non-null. */ private final MethodFilter[] methodFilters; + /** Exclude methods matching one of the filters in this array if the array is non-null. */ + private final MethodFilter[] excludeMethodFilters; + // Counters private int classFileCounter = 0; private AtomicLong compiledMethodsCounter = new AtomicLong(); @@ -180,12 +185,15 @@ * @param files {@link File#pathSeparator} separated list of Zip/Jar files to compile * @param startAt index of the class file to start compilation at * @param stopAt index of the class file to stop compilation at + * @param methodFilters + * @param excludeMethodFilters */ - public CompileTheWorld(String files, Config config, int startAt, int stopAt, String methodFilters, boolean verbose) { + public CompileTheWorld(String files, Config config, int startAt, int stopAt, String methodFilters, String excludeMethodFilters, boolean verbose) { this.files = files; this.startAt = startAt; this.stopAt = stopAt; this.methodFilters = methodFilters == null || methodFilters.isEmpty() ? null : MethodFilter.parse(methodFilters); + this.excludeMethodFilters = excludeMethodFilters == null || excludeMethodFilters.isEmpty() ? null : MethodFilter.parse(excludeMethodFilters); this.verbose = verbose; this.config = config; @@ -292,8 +300,12 @@ if (methodFilters == null || methodFilters.length == 0) { println("CompileTheWorld : Compiling all classes in " + entry); } else { - println("CompileTheWorld : Compiling all methods in " + entry + " matching one of the following filters: " + - Arrays.asList(methodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", "))); + String include = Arrays.asList(methodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", ")); + println("CompileTheWorld : Compiling all methods in " + entry + " matching one of the following filters: " + include); + } + if (excludeMethodFilters != null && excludeMethodFilters.length > 0) { + String exclude = Arrays.asList(excludeMethodFilters).stream().map(MethodFilter::toString).collect(Collectors.joining(", ")); + println("CompileTheWorld : Excluding all methods matching one of the follwing filters: " + exclude); } println(); @@ -321,6 +333,9 @@ if (methodFilters != null && !MethodFilter.matchesClassName(methodFilters, dottedClassName)) { continue; } + if (excludeMethodFilters != null && MethodFilter.matchesClassName(excludeMethodFilters, dottedClassName)) { + continue; + } if (dottedClassName.startsWith("jdk.management.") || dottedClassName.startsWith("jdk.internal.cmm.*")) { continue; @@ -427,6 +442,9 @@ if (methodFilters != null && !MethodFilter.matches(methodFilters, method)) { return; } + if (excludeMethodFilters != null && MethodFilter.matches(excludeMethodFilters, method)) { + return; + } Future task = threadPool.submit(new Runnable() { public void run() { waitToRun(); diff -r 05a2b72c071f -r f61ff7f01bc2 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Wed Apr 15 13:49:38 2015 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotGraalRuntime.java Wed Apr 15 16:30:45 2015 +0200 @@ -552,7 +552,7 @@ getCompilerToVM().resetCompilationStatistics(); TTY.println("CompileTheWorld : iteration " + i); CompileTheWorld ctw = new CompileTheWorld(CompileTheWorldClasspath.getValue(), new Config(CompileTheWorldConfig.getValue()), CompileTheWorldStartAt.getValue(), - CompileTheWorldStopAt.getValue(), CompileTheWorldMethodFilter.getValue(), CompileTheWorldVerbose.getValue()); + CompileTheWorldStopAt.getValue(), CompileTheWorldMethodFilter.getValue(), CompileTheWorldExcludeMethodFilter.getValue(), CompileTheWorldVerbose.getValue()); ctw.compile(); } System.exit(0); diff -r 05a2b72c071f -r f61ff7f01bc2 mx/mx_graal.py --- a/mx/mx_graal.py Wed Apr 15 13:49:38 2015 +0200 +++ b/mx/mx_graal.py Wed Apr 15 16:30:45 2015 +0200 @@ -1482,6 +1482,7 @@ jar = os.path.abspath(args.jar) else: jar = join(_jdk(installJars=False), 'jre', 'lib', 'rt.jar') + vmargs.append('-G:CompileTheWorldExcludeMethodFilter=sun.awt.X11.*.*') vmargs += ['-XX:+CompileTheWorld'] vm_ = _get_vm() @@ -1492,7 +1493,7 @@ else: vmargs += ['-Xbootclasspath/p:' + jar] - # suppress menubar and dock when running on Mac + # suppress menubar and dock when running on Mac; exclude x11 classes as they may cause vm crashes (on Solaris) vmargs = ['-Djava.awt.headless=true'] + vmargs vm(vmargs)