Hi Mandy,
Webrev updated in place: (Only System.java is modified)
http://cr.openjdk.java.net/%7Erriggs/webrev-props-cleanup-8185496/index.html
On 11/07/2018 07:19 PM, Mandy Chung wrote:
Hi Roger
On 11/6/18 8:17 AM, Roger Riggs wrote:
While working to reduce startup time initializing properties, a pair
of improvements are proposed.
8185496: Improve performance of system properties initialization in
initPhase1 [1]
8213424: VersionProps duplicate initialization [2]
1) The overhead of providing default values in native is reduced by
applying the defaults
when first used and leaving the properties undefined unless there is
an OS supplied value or a -D command line argument
2) Two tests for properties are combined into a more complete test
webrev:
http://cr.openjdk.java.net/~rriggs/webrev-props-cleanup-8185496/
This is a good cleanup. Some comments:
Is "user.timezone" system property not set by default? Before the
change, System.getProperty("user.timezone") always returns non-null.
With this patch, if it returns null, it may need a CSR for this
behavioral change.
ok, https://bugs.openjdk.java.net/browse/JDK-8213551
Please review when it is convenient.
System.java
804 initProperties(props);
805 System.props = props;
806 VersionProps.init();
This seems worth refactoring of existing code.
initProperties(props) and VersionProps.init() are called in initPhase1.
I think VersionProps.init can be called right after initProperties(props)
in initPhase1. So it'd be cleaner to have a java method to call
initProperties(props) and add the version-related system properties
to the given props (i.e. VersionProps.init could take Properties object).
ok, will do
jvm.cpp
The other place to filter the property is Arguments::add_property
or maybe in Arguments::parse_argument. The runtime team can advise
where is the preferred place.
Its cleaner to keep it in the jvm_initProperties function and not pollute
the general Arguments parsing code with this exception case.
As you mentioned the future cleanup, the VM is using system properties
as the internal interface with the library code and in some cases the
library code removes those system properties after startup
(VM.saveAndRemoveProperties). As we discussed, one approach would be
to define a native JVM interface to fetch the values in a batch but we
have to measure the performance to determine if this is better.
yep, that's next.
Thanks, Roger
Mandy