Open code review for 8061999 Enhance VM option parsing to allow options to be specified
Daniel D. Daugherty
daniel.daugherty at oracle.com
Thu Jun 25 16:49:51 UTC 2015
On 6/25/15 12:52 AM, David Holmes wrote:
> On 25/06/2015 4:38 PM, Dmitry Dmitriev wrote:
>> Hello David,
>>
>> I mean that we can define "-Dmy.property=value" inside VM Option file.
>
> Okay - that isn't necessarily a good thing. This is blurring the
> division of responsibility between the launcher and the VM when it
> comes to argument processing. I don't see why a VM option file should
> need to handle -Dxxx arguments - that suggests a need for a more
> general command-file approach processed by the launcher.
Hmmm... The above makes it sound like you think only the launcher
handles '-DXXX' options. That is not correct... Here's the current
code:
src/share/vm/runtime/arguments.cpp
2691 // -D
2692 } else if (match_option(option, "-D", &tail)) {
2693 const char* value;
2694 if (match_option(option, "-Djava.endorsed.dirs=", &value) &&
2695 *value!= '\0' && strcmp(value, "\"\"") != 0) {
2696 // abort if -Djava.endorsed.dirs is set
2697 jio_fprintf(defaultStream::output_stream(),
2698 "-Djava.endorsed.dirs=%s is not supported. Endorsed
standards
and standalone APIs\n"
2699 "in modular form will be supported via the concept of
upgradea
ble modules.\n", value);
2700 return JNI_EINVAL;
2701 }
2702 if (match_option(option, "-Djava.ext.dirs=", &value) &&
2703 *value != '\0' && strcmp(value, "\"\"") != 0) {
2704 // abort if -Djava.ext.dirs is set
2705 jio_fprintf(defaultStream::output_stream(),
2706 "-Djava.ext.dirs=%s is not supported. Use -classpath
instead.
\n", value);
2707 return JNI_EINVAL;
2708 }
2709
2710 if (!add_property(tail)) {
2711 return JNI_ENOMEM;
2712 }
2713 // Out of the box management support
2714 if (match_option(option, "-Dcom.sun.management", &tail)) {
2715 #if INCLUDE_MANAGEMENT
2716 if (FLAG_SET_CMDLINE(bool, ManagementServer, true) !=
Flag::SUCC
ESS) {
2717 return JNI_EINVAL;
2718 }
2719 #else
2720 jio_fprintf(defaultStream::output_stream(),
2721 "-Dcom.sun.management is not supported in this VM.\n");
2722 return JNI_ERR;
2723 #endif
2724 }
L2710 is where we add a property that is not already
handled by special logic above that.
$ java -showversion -XX:+PrintVMOptions -Dmy.property="This is my
special property." DumpMyProperty
VM option '+PrintVMOptions'
java version "1.9.0-ea"
Java(TM) SE Runtime Environment (build 1.9.0-ea-b69)
Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b69, mixed mode)
my.property=This is my special property.
In the above example, the "my.property" Java property is parsed
by the above code in the VM. The launcher doesn't care about this
particular property.
Dan
>
> David
> -----
>
>
>> Thanks,
>> Dmitry
>>
>> On 25.06.2015 8:01, David Holmes wrote:
>>> On 25/06/2015 4:10 AM, Dmitry Dmitriev wrote:
>>>> Hello Dan,
>>>> I just want to add following: new VM Options file feature allow to
>>>> define property inside option file.
>>>
>>> What do you mean by that?
>>>
>>> David
>>>
>>>> Thanks,
>>>> Dmitry
>>>>
>>>> On 24.06.2015 19:19, Daniel D. Daugherty wrote:
>>>>> On 6/23/15 10:43 PM, John Rose wrote:
>>>>>> On Jun 23, 2015, at 7:50 PM, David Holmes <david.holmes at oracle.com>
>>>>>> wrote:
>>>>>>> On 24/06/2015 3:43 AM, Ron Durbin wrote:
>>>>>>>> David,
>>>>>>>>
>>>>>>>> The '-XX:Flags' option was considered during the research phase
>>>>>>>> of this project and was rejected because of its limitations. The
>>>>>>>> '-XX:Flags' option only works for boolean flag options and it
>>>>>>>> uses a different syntax for the options than the command line.
>>>>>>>> For example, '-XX:+UseSerialGC' would be specified as
>>>>>>>> '+UseSerialGC'
>>>>>>>> in the '-XX:Flags' option file.
>>>>>>> I'm a little surprised the Flags option wasn't extended to cover
>>>>>>> these additional requirements. But presumably it should now be
>>>>>>> deprecated as we (again presumably) don't want to have two
>>>>>>> mechanisms for doing this.
>>>>>> I thought the Flags option used to handle any command line options,
>>>>>> and like David I'm surprised the right answer is to get rid of it
>>>>>> and
>>>>>> make a new option that does what I think the Flags option should be
>>>>>> doing.
>>>>>>
>>>>>> — John
>>>>>
>>>>> Greetings,
>>>>>
>>>>> Ron is out of the office until next week so I'll provide a little
>>>>> bit of background...
>>>>>
>>>>> Ron has a detailed write-up documenting all the research that he
>>>>> did on the various command line option mechanisms. We had planned
>>>>> to attach that write-up to the bug report, but we dropped the ball
>>>>> (Sorry Mary!) After Ron returns, we'll make a final editing pass
>>>>> on the document and attach it to the bug report.
>>>>>
>>>>> I fleshed out the '-XX:Flags' test cases that Ron posted earlier
>>>>> in the thread:
>>>>>
>>>>> $ more flags.input.*::::::::::::::
>>>>> flags.input.boolean
>>>>> ::::::::::::::
>>>>> +UseSerialGC
>>>>> ::::::::::::::
>>>>> flags.input.ccstr
>>>>> ::::::::::::::
>>>>> ErrorFile=my_error_file
>>>>> ::::::::::::::
>>>>> flags.input.uintx
>>>>> ::::::::::::::
>>>>> MinRAMFraction=8
>>>>>
>>>>> $ java -XX:+PrintVMOptions -XX:Flags=flags.input.boolean -version
>>>>> VM option '+UseSerialGC'
>>>>> VM option '+PrintVMOptions'
>>>>> VM option 'Flags=flags.input.boolean'
>>>>> java version "1.9.0-ea"
>>>>> Java(TM) SE Runtime Environment (build 1.9.0-ea-b69)
>>>>> Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b69, mixed mode)
>>>>>
>>>>> $ java -XX:+PrintVMOptions -XX:Flags=flags.input.ccstr -version
>>>>> VM option 'ErrorFile=my_error_file'
>>>>> VM option '+PrintVMOptions'
>>>>> VM option 'Flags=flags.input.ccstr'
>>>>> java version "1.9.0-ea"
>>>>> Java(TM) SE Runtime Environment (build 1.9.0-ea-b69)
>>>>> Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b69, mixed mode)
>>>>>
>>>>> $ java -XX:+PrintVMOptions -XX:Flags=flags.input.uintx -version
>>>>> VM option 'MinRAMFraction=8'
>>>>> VM option '+PrintVMOptions'
>>>>> VM option 'Flags=flags.input.uintx'
>>>>> java version "1.9.0-ea"
>>>>> Java(TM) SE Runtime Environment (build 1.9.0-ea-b69)
>>>>> Java HotSpot(TM) 64-Bit Server VM (build 1.9.0-ea-b69, mixed mode)
>>>>>
>>>>>
>>>>> It looks like the '-XX:Flags' option does work for 'bool', 'uintx'
>>>>> and 'ccstr' options. Clearly Ron and I didn't remember the exact
>>>>> reason that he ruled out using the '-XX:Flags' option. This part
>>>>> of the review thread will have to be resolved after Ron returns.
>>>>>
>>>>> Dan
>>>>
>>
More information about the hotspot-runtime-dev
mailing list