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