Hi Peter,

All of your suggestions look good. I've updated 
http://cr.openjdk.java.net/~dnsimon/8177845/jdk/src/java.base/share/classes/jdk/internal/misc/VM.java.udiff.html
 to include them (please check I didn't make any copy errors in the process).

I was not aware of the new Map.ofEntries method. Nice to see more space 
efficient map implementations being added to the JDK.

Thanks!

-Doug

> On 19 Apr 2017, at 10:12, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> 
> 
> On 04/19/2017 09:42 AM, Peter Levart wrote:
>> 
>> 
>> On 04/19/2017 09:37 AM, Peter Levart wrote:
>>> 
>>> 
>>> http://cr.openjdk.java.net/~plevart/jdk9-dev/8177845_VM.getSavedProperties/webrev.01/
>>>  
>> 
>> Also, while we are at it, the following javadocs in the getSavedProperty() 
>> do not apply any more:
>> 
>> 138      * It accesses a private copy of the system properties so
>> 139      * that user's locking of the system properties object will not
>> 140      * cause the library to deadlock.
>> 
>> In JDK 9, Properties class does not use locking any more on the Properties 
>> instance for get()/getProperty() methods...
>> 
>> Regards, Peter
>> 
> 
> I also noticed the following comment:
> 
>    // TODO: the Property Management needs to be refactored and
>    // the appropriate prop keys need to be accessible to the
>    // calling classes to avoid duplication of keys.
>    private static Map<String, String> savedProps;
> 
> ...which is not entirely true. Neither keys nor values are duplicated (they 
> are just referenced in the new copy of the Properties/Map object). What is 
> duplicated is an excessive amount of internal objects, such as array slots 
> and Map.Entry objects. If this is a concern, then we could use the new 
> immutable Map implementation that is available in JDK 9, so the following 
> lines in my webrev:
> 
> 181         @SuppressWarnings("unchecked")
> 182         Map<String, String> sp = new HashMap<>((Map)props);
> 183         // only main thread is running at this time, so savedProps and
> 184         // its content will be correctly published to threads started 
> later
> 185         savedProps = Collections.unmodifiableMap(sp);
> 
> Could be changed into:
> 
>        @SuppressWarnings("unchecked")
>        Map<String, String> sp =
>            Map.ofEntries(props.entrySet().toArray(new Map.Entry[0]));
>        // only main thread is running at this time, so savedProps
>        // will be correctly published to threads started later
>        savedProps = sp;
> 
> ...to save some excessive space (the implementation is a linear-probe 
> hashtable which keeps keys and values directly in an array without wrapping 
> them with  Map.Entry objects).
> 
> Regards, Peter
> 

Reply via email to