Proposed javac argument processing performance improvement
David Schlosnagle
schlosna at gmail.com
Mon Jun 13 16:06:45 PDT 2011
On Mon, Jun 13, 2011 at 2:57 PM, Dan Smith <daniel.smith at oracle.com> wrote:
> Thank you very much for this useful analysis and patch!
>
> I'll work on getting this problem addressed. The current target for new patches is JDK 8; I'll also create a request to backport the fix to a JDK 7 update.
Excellent, if there is anything I can do to help get this back ported
into JDK 7 and ideally 6, let me know.
> Out of curiosity, what sort of an impact does this have on total compilation time? Given the n^2 growth, does processArgs start to dominate compilation time as n gets larger, or does it remain a fixed (probably small?) proportion of the total compilation time?
After profiling the current implementation on Windows, processArgs
does end up taking just over 51% overall javac execution time for
large numbers of input files with around 4000 input files. If you're
interested in the details, I attached output from a YourKit tracing
profile session for javac with 4411 files as input on Windows. (Note
that the execution times are extremely long due to the tracing
overhead for including java.* and com.sun.* traces.)
For 4411 input files on Windows,
com.sun.tools.javac.util.List.contains, java.io.File.equals,
java.io.File.compareTo, java.io.Win32FileSystem.compare,
java.lang.String.compareToIgnoreCase, and
java.lang.String$CaseInsensitiveComparator.compare are all executed
(N+1)*(N/2) = 9,730,666 times each. On non-Windows filesystems, the
implementation of java.io.File.compareTo just uses String.compareTo,
so it is not as expensive as the case insensitive comparison of
Windows.
With the proposed patch, there will only be O(N) invocations of
java.io.File.hashCode (and java.io.File.equals on collision).
Unfortunately I don't have an OpenJDK Windows build right now, but I
gathered some stats from a single pass on my Mac OS X OpenJDK 7 build
compiling essentially a empty classes "public class TestN {}".
Before:
=======
# files processArgs javac real javac user javac sys
1 4.987ms 0m2.576s 0m0.725s 0m0.136s
1000 40.397ms 0m2.032s 0m3.470s 0m0.368s
2000 86.796ms 0m3.551s 0m5.275s 0m0.625s
3000 219.402ms 0m6.076s 0m8.510s 0m1.121s
4000 217.765ms 0m7.272s 0m11.209s 0m1.219s
5000 320.309ms 0m10.277s 0m16.011s 0m1.910s
6000 425.571ms 0m11.712s 0m18.127s 0m2.181s
7000 503.229ms 0m12.089s 0m18.869s 0m1.960s
8000 618.292ms 0m15.680s 0m21.288s 0m2.109s
9000 783.368ms 0m16.208s 0m22.597s 0m2.289s
10000 926.978ms 0m18.804s 0m25.991s 0m2.382s
After:
======
# files processArgs javac real javac user javac sys
1 2.062ms 0m0.869s 0m0.887s 0m0.121s
1000 32.369ms 0m4.702s 0m3.729s 0m0.415s
2000 63.746ms 0m6.610s 0m5.914s 0m0.768s
3000 67.950ms 0m5.936s 0m8.116s 0m1.050s
4000 76.996ms 0m7.306s 0m11.667s 0m1.293s
5000 93.124ms 0m9.083s 0m15.092s 0m1.812s
6000 111.525ms 0m10.497s 0m17.183s 0m2.038s
7000 136.811ms 0m12.383s 0m19.278s 0m2.214s
8000 136.578ms 0m12.343s 0m18.999s 0m1.902s
9000 231.338ms 0m15.045s 0m21.841s 0m2.199s
10000 156.525ms 0m17.555s 0m25.835s 0m2.393s
- Dave
-------------- next part --------------
YourKit profiling details for 4411 Java input files to javac.
Note: execution times are extremely long due to the tracing overhead for including java.* and com.sun.* traces.
Call tree (all threads together)
+-----------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------------+-----------------+--------------------+
| Name | Time (ms) | Avg. Time (ms) | Own Time (ms) | Invocation Count |
+-----------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------------+-----------------+--------------------+
| +---<All threads> | 6,270,195 100 % | | | |
| | | | | | |
| +---com.sun.tools.javac.Main.main(String[]) | 6,267,570 100 % | 6,267,570 | 0 | 1 |
| | | | | | | |
| | +---com.sun.tools.javac.Main.compile(String[]) | 6,267,570 100 % | 6,267,570 | 0 | 1 |
| | | | | | | |
| | +---com.sun.tools.javac.main.Main.compile(String[]) | 6,267,479 100 % | 6,267,479 | 0 | 1 |
| | | | | | | | |
| | | +---com.sun.tools.javac.main.Main.compile(String[], Context) | 6,267,447 100 % | 6,267,447 | 0 | 1 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.main.Main.compile(String[], Context, List, Iterable) | 6,267,447 100 % | 6,267,447 | 0 | 1 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.main.Main.processArgs(String[]) | 3,251,385 52 % | 3,251,385 | 0 | 1 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.RecognizedOptions$26.process(Options, String) | 3,251,338 52 % | 736 | 0 | 4,412 |
| | | | | | | | | | | |
| | | | | | +---com.sun.tools.javac.main.Main$1.addFile(File) | 3,249,763 52 % | 736 | 0 | 4,412 |
| | | | | | | | | | | | |
| | | | | | | +---com.sun.tools.javac.util.ListBuffer.contains(Object) | 3,249,685 52 % | 736 | 0 | 4,412 |
| | | | | | | | | | | | | |
| | | | | | | | +---com.sun.tools.javac.util.List.contains(Object) | 3,249,685 52 % | 736 | 0 | 4,412 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.io.File.equals(Object) | 3,249,685 52 % | 0 | 13,024 | 9,730,666 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.io.File.compareTo(File) | 3,236,660 52 % | 0 | 12,340 | 9,730,666 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.io.Win32FileSystem.compare(File, File) | 3,224,320 51 % | 0 | 12,680 | 9,730,666 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.lang.String.compareToIgnoreCase(String) | 3,211,640 51 % | 0 | 13,535 | 9,730,666 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.lang.String$CaseInsensitiveComparator.compare(Object, Object) | 3,198,105 51 % | 0 | 13,021 | 9,730,666 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.lang.String$CaseInsensitiveComparator.compare(String, String) | 3,185,083 51 % | 0 | 1,438,561 | 9,730,666 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.lang.String.charAt(int) | 1,556,862 25 % | 0 | 1,556,862 | 2,209,281,822 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.lang.Character.toUpperCase(char) | 95,618 2 % | 0 | 26,685 | 19,549,020 |
| | | | | | | | | | | | | |
| | | | | | | | +---java.lang.Character.toLowerCase(char) | 94,041 1 % | 0 | 27,076 | 19,461,332 |
| | | | | | | | | | | | |
| | | | | | | +---com.sun.tools.javac.util.ListBuffer.append(Object) | 78 0 % | 0 | 15 | 4,412 |
| | | | | | | | | | | |
| | | | | | +---java.io.File.<init>(String) | 1,105 0 % | 0 | 12 | 4,412 |
| | | | | | | | | | | |
| | | | | | +---java.io.File.exists() | 374 0 % | 0 | 15 | 4,412 |
| | | | | | | | | | | |
| | | | | | +---java.io.File.isFile() | 93 0 % | 0 | 15 | 4,412 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.JavacOption$Option.hasArg() | 15 0 % | 0 | 15 | 4,419 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.RecognizedOptions$26.matches(String) | 15 0 % | 0 | 0 | 4,412 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.RecognizedOptions$13.process(Options, String, String) | 15 0 % | 15 | 0 | 1 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.main.JavaCompiler.compile(List, List, Iterable) | 3,011,780 48 % | 3,011,780 | 0 | 1 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.JavaCompiler.compile2() | 2,657,963 42 % | 2,657,963 | 0 | 1 |
| | | | | | | | | | | |
| | | | | | +---com.sun.tools.javac.main.JavaCompiler.attribute(Env) | 1,816,560 29 % | 581 | 0 | 3,124 |
| | | | | | | | | | | | |
| | | | | | | +---com.sun.tools.javac.comp.Attr.attribClass(JCDiagnostic$DiagnosticPosition, Symbol$ClassSymbol) | 1,816,513 29 % | 581 | 0 | 3,124 |
| | | | | | | | | | | | | |
| | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClass(Symbol$ClassSymbol) | 1,816,498 29 % | 581 | 0 | 3,124 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClass(Symbol$ClassSymbol) | 1,621,719 26 % | 560 | 0 | 2,893 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClass(Symbol$ClassSymbol) | 1,567,987 25 % | 569 | 0 | 2,751 |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClass(Symbol$ClassSymbol) | 906,889 14 % | 333 | 0 | 2,719 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClassBody(Env, Symbol$ClassSymbol) | 772,356 12 % | 3,387 | 0 | 228 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkCompatibleSupertypes(JCDiagnostic$DiagnosticPosition, Type) | 457,541 7 % | 2,006 | 0 | 228 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribStat(JCTree, Env) | 289,004 5 % | 38 | 0 | 7,500 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkImplementations(JCTree$JCClassDecl) | 20,887 0 % | 91 | 0 | 228 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkAllDefined(JCDiagnostic$DiagnosticPosition, Symbol$ClassSymbol) | 3,072 0 % | 139 | 0 | 22 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkClassBounds(JCDiagnostic$DiagnosticPosition, Type) | 1,710 0 % | 7 | 0 | 228 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.validateAnnotations(List, Symbol) | 93 0 % | 0 | 0 | 228 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkCyclicConstructors(JCTree$JCClassDecl) | 30 0 % | 0 | 30 | 228 |
| | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.validate(List) | 15 0 % | 0 | 15 | 228 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClass(Symbol$ClassSymbol) | 134,501 2 % | 53 | 0 | 2,501 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkNonCyclic(JCDiagnostic$DiagnosticPosition, Type) | 15 0 % | 0 | 15 | 2,719 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.code.Lint.augment(List, long) | 15 0 % | 0 | 15 | 228 |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClassBody(Env, Symbol$ClassSymbol) | 661,067 11 % | 1,916 | 0 | 345 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribStat(JCTree, Env) | 350,687 6 % | 27 | 0 | 12,951 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkCompatibleSupertypes(JCDiagnostic$DiagnosticPosition, Type) | 283,727 5 % | 822 | 0 | 345 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkImplementations(JCTree$JCClassDecl) | 24,779 0 % | 71 | 0 | 345 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkClassBounds(JCDiagnostic$DiagnosticPosition, Type) | 1,591 0 % | 4 | 0 | 345 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.validateAnnotations(List, Symbol) | 218 0 % | 0 | 0 | 345 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkCyclicConstructors(JCTree$JCClassDecl) | 31 0 % | 0 | 0 | 345 |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | +---com.sun.tools.javac.util.List.nonEmpty() | 31 0 % | 0 | 31 | 13,641 |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | +---com.sun.tools.javac.code.Types.supertype(Type) | 31 0 % | 0 | 0 | 2,751 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClassBody(Env, Symbol$ClassSymbol) | 53,622 1 % | 89 | 0 | 602 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.code.Types.supertype(Type) | 31 0 % | 0 | 0 | 2,893 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkNonCyclic(JCDiagnostic$DiagnosticPosition, Type) | 31 0 % | 0 | 0 | 2,893 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.util.Log.useSource(JavaFileObject) | 15 0 % | 0 | 15 | 1,204 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---java.util.HashMap.get(Object) | 15 0 % | 0 | 15 | 602 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.code.Lint.augment(List, long) | 15 0 % | 0 | 0 | 602 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribClassBody(Env, Symbol$ClassSymbol) | 194,590 3 % | 121 | 0 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkAllDefined(JCDiagnostic$DiagnosticPosition, Symbol$ClassSymbol) | 120,811 2 % | 84 | 0 | 1,437 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkImplementations(JCTree$JCClassDecl) | 49,259 1 % | 30 | 0 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Attr.attribStat(JCTree, Env) | 20,063 0 % | 2 | 0 | 8,770 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkClassBounds(JCDiagnostic$DiagnosticPosition, Type) | 3,807 0 % | 2 | 0 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.validateAnnotations(List, Symbol) | 444 0 % | 0 | 25 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkCyclicConstructors(JCTree$JCClassDecl) | 124 0 % | 0 | 15 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.validate(JCTree) | 31 0 % | 0 | 0 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.checkCompatibleSupertypes(JCDiagnostic$DiagnosticPosition, Type) | 31 0 % | 0 | 0 | 1,597 |
| | | | | | | | | | | | | | | |
| | | | | | | | | | +---com.sun.tools.javac.comp.Check.validate(List) | 15 0 % | 0 | 15 | 1,597 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.comp.Check.checkNonCyclic(JCDiagnostic$DiagnosticPosition, Type) | 93 0 % | 0 | 0 | 3,124 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.code.Lint.augment(List, long) | 31 0 % | 0 | 0 | 1,597 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.code.Symbol$ClassSymbol.flags() | 15 0 % | 0 | 15 | 1,597 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.code.Types.supertype(Type) | 15 0 % | 0 | 0 | 3,124 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.util.Log.useSource(JavaFileObject) | 15 0 % | 0 | 15 | 3,194 |
| | | | | | | | | | | | | | |
| | | | | | | | | +---com.sun.tools.javac.comp.Check.checkDeprecatedAnnotation(JCDiagnostic$DiagnosticPosition, Symbol) | 15 0 % | 0 | 15 | 1,597 |
| | | | | | | | | | | | | |
| | | | | | | | +---com.sun.tools.javac.comp.Annotate.flush() | 15 0 % | 0 | 15 | 3,124 |
| | | | | | | | | | | | |
| | | | | | | +---com.sun.tools.javac.util.Log.useSource(JavaFileObject) | 46 0 % | 0 | 31 | 6,247 |
| | | | | | | | | | | |
| | | | | | +---com.sun.tools.javac.main.JavaCompiler.desugar(List) | 774,275 12 % | 247 | 0 | 3,123 |
| | | | | | | | | | | |
| | | | | | +---com.sun.tools.javac.main.JavaCompiler.generate(List) | 56,904 1 % | 18 | 0 | 3,123 |
| | | | | | | | | | | |
| | | | | | +---com.sun.tools.javac.main.JavaCompiler.flow(Env) | 10,160 0 % | 3 | 0 | 3,123 |
| | | | | | | | | | | |
| | | | | | +---com.sun.tools.javac.util.ListBuffer.next() | 46 0 % | 0 | 46 | 3,124 |
| | | | | | | | | | | |
| | | | | | +---java.lang.ClassLoader.loadClass(String) | 15 0 % | 15 | 0 | 1 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.JavaCompiler.enterTrees(List) | 227,960 4 % | 227,960 | 0 | 1 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.JavaCompiler.parseFiles(List) | 122,709 2 % | 122,709 | 0 | 1 |
| | | | | | | | | | |
| | | | | +---com.sun.tools.javac.main.JavaCompiler.initProcessAnnotations(Iterable) | 3,147 0 % | 3,147 | 0 | 1 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.main.CommandLine.parse(String[]) | 3,146 0 % | 3,146 | 0 | 1 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.main.JavaCompiler.instance(Context) | 683 0 % | 341 | 0 | 2 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.util.DefaultFileManager.getJavaFileObjectsFromFiles(Iterable) | 296 0 % | 296 | 0 | 1 |
| | | | | | | | | |
| | | | +---java.lang.ClassLoader.loadClass(String) | 61 0 % | 2 | 0 | 25 |
| | | | | | | | | |
| | | | +---java.util.AbstractList$Itr.next() | 46 0 % | 0 | 46 | 4,412 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.util.Context.get(Class) | 31 0 % | 31 | 0 | 1 |
| | | | | | | | | |
| | | | +---com.sun.tools.javac.util.List.prepend(Object) | 15 0 % | 0 | 0 | 8,824 |
| | | | | | | | |
| | | +---java.lang.ClassLoader.loadClass(String) | 31 0 % | 1 | 0 | 23 |
| | | | | | | |
| | +---com.sun.tools.javac.main.Main.<init>(String) | 76 0 % | 76 | 0 | 1 |
| | | | | | | |
| | +---java.lang.ClassLoader.loadClass(String) | 15 0 % | 0 | 0 | 20 |
| | | | | | |
| +---java.lang.ref.Finalizer$FinalizerThread.run() | 2,146 0 % | 2,146 | 0 | 1 |
| | | | | | |
| +---java.lang.ref.Reference$ReferenceHandler.run() | 404 0 % | 404 | 123 | 1 |
| | | | | | |
| +---java.lang.ClassLoader.loadClass(String) | 57 0 % | 9 | 0 | 6 |
| | | | | | |
| +---java.lang.String.<init>(byte[], String) | 15 0 % | 1 | 0 | 14 |
+-----------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------------+-----------------+--------------------+
CPU hot spots
+-------------------------------------------------------------------------------------------+--------------------+--------------------+
| Name | Time (ms) | Invocation Count |
+-------------------------------------------------------------------------------------------+--------------------+--------------------+
| +---java.lang.String$CaseInsensitiveComparator.compare(String, String) | 3,187,016 51 % | 9,739,721 |
| +---com.sun.tools.javac.code.Type$ClassType.accept(Type$Visitor, Object) | 1,886,220 30 % | 291,986,289 |
| +---com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Type, Object) | 1,664,501 27 % | 87,588,294 |
| +---java.lang.String.charAt(int) | 1,560,565 25 % | 2,214,530,911 |
| +---com.sun.tools.javac.code.Types.asSuper(Type, Symbol) | 1,389,993 22 % | 67,933,035 |
| +---com.sun.tools.javac.code.Types$14.visitClassType(Type$ClassType, Object) | 1,377,241 22 % | 67,890,233 |
| +---com.sun.tools.javac.code.Types$14.visitClassType(Type$ClassType, Symbol) | 1,373,419 22 % | 67,890,233 |
| +---com.sun.tools.javac.code.Types$UnaryVisitor.visit(Type) | 1,150,529 18 % | 215,522,154 |
| +---com.sun.tools.javac.code.Types.supertype(Type) | 776,346 12 % | 120,203,422 |
| +---com.sun.tools.javac.code.Types.interfaces(Type) | 564,352 9 % | 87,001,829 |
| +---com.sun.tools.javac.comp.Resolve.findMemberType(Env, Type, Name, Symbol$TypeSymbol) | 368,939 6 % | 19,660,229 |
| +---com.sun.tools.javac.code.Types$18.visitClassType(Type$ClassType, Object) | 262,150 4 % | 120,065,634 |
| +---com.sun.tools.javac.code.Types$19.visitClassType(Type$ClassType, Object) | 189,477 3 % | 86,867,419 |
+-------------------------------------------------------------------------------------------+--------------------+--------------------+
Back traces
+-------------------------------------------------------------------------------------------------------------------------+--------------------+--------------------+
| Name | Time (ms) | Invocation Count |
+-------------------------------------------------------------------------------------------------------------------------+--------------------+--------------------+
| +---java.lang.String$CaseInsensitiveComparator.compare(String, String) | 3,187,016 100 % | 9,739,721 100 % |
| +---java.lang.String$CaseInsensitiveComparator.compare(Object, Object) | | |
| +---java.lang.String.compareToIgnoreCase(String) | | |
| +---java.io.Win32FileSystem.compare(File, File) | | |
| +---java.io.File.compareTo(File) | | |
| +---java.io.File.equals(Object) | | |
| +---com.sun.tools.javac.util.List.contains(Object) | 3,185,083 100 % | 9,730,666 100 % |
| | +---com.sun.tools.javac.util.ListBuffer.contains(Object) | | |
| | +---com.sun.tools.javac.main.Main$1.addFile(File) | | |
| | +---com.sun.tools.javac.main.RecognizedOptions$26.process(Options, String) | | |
| | +---com.sun.tools.javac.main.Main.processArgs(String[]) | | |
| | +---com.sun.tools.javac.main.Main.compile(String[], Context, List, Iterable) | | |
| | +---com.sun.tools.javac.main.Main.compile(String[], Context) | | |
| | +---com.sun.tools.javac.main.Main.compile(String[]) | | |
| | +---com.sun.tools.javac.Main.compile(String[]) | | |
| | +---com.sun.tools.javac.Main.main(String[]) | | |
| +---com.sun.tools.javac.util.DefaultFileManager.inferBinaryName(JavaFileManager$Location, JavaFileObject) | 1,932 0 % | 8,832 0 % |
| +---com.sun.tools.javac.util.DefaultFileManager.openArchive(File) | 0 0 % | 1 0 % |
| +---com.sun.tools.javac.util.DefaultFileManager$RegularFileObject.equals(Object) | 0 0 % | 2 0 % |
| +---com.sun.tools.javac.util.Paths.computeBootClassPath() | 0 0 % | 9 0 % |
| +---com.sun.tools.javac.util.Paths.isBootClassPathRtJar(File) | 0 0 % | 196 0 % |
| +---java.util.concurrent.ConcurrentHashMap$Segment.get(Object, int) | 0 0 % | 10 0 % |
| +---java.util.HashMap.getEntry(Object) | 0 0 % | 5 0 % |
+-------------------------------------------------------------------------------------------------------------------------+--------------------+--------------------+
More information about the compiler-dev
mailing list