-XX:CompileOnly command: how should it look like?

John Rose john.r.rose at oracle.com
Fri Oct 12 16:45:48 PDT 2012

On Oct 12, 2012, at 4:00 PM, Vladimir Kozlov wrote:

> From what I remember originally we only accepted format ("," on command line to separate method and " " in .hotspot_compiler file):
> /c1/c2/c3,m
> Then Tom added next format to match PrintCompilation output:
> c1.c2.c3::m

The original command form was three blank-separated fields, command classname methodname.

We added ',' as an alias for ' ' (everywhere) to make it easy to pass CC options through various shells.  The parser turns ',' to ' ', then separates into fields.

We also added support for '::' as Vladimir said, to allow cut-and-paste of PrintC output names.  Once again, the '::' turns into a field separator.

The ',' does not mean "here is another part of a command", so CompileOnly=String.length,List.size is nonsense.

Multiple commands are separated by newlines '\n'.  This is most obvious in the .hotspot_compiler file, but is also true on the command line, because multiple accumulating string options are also glued together with newline '\n'.  Thus, -XX:CompileCommand=foo -XX:CompileCommand=bar is the same as -XX:CompileCommand="foo${n}bar" where ${n} is a newline character.

Here's the embedded comment from CompilerOracle::parse_from_line:
    // Allow '.' to separate the class name from the method name.
    // This is the preferred spelling of methods:
    //      exclude java/lang/String.indexOf(I)I
    // Allow ',' for spaces (eases command line quoting).
    //      exclude,java/lang/String.indexOf
    // For backward compatibility, allow space as separator also.
    //      exclude java/lang/String indexOf
    //      exclude,java/lang/String,indexOf
    // For easy cut-and-paste of method names, allow VM output format
    // as produced by Method::print_short_name:
    //      exclude java.lang.String::indexOf

(I admit it's kludgey stuff.)

— John

More information about the hotspot-compiler-dev mailing list