Hi Doug, Mandy,

Just a minor comment on the VM class changes...

Note that Properties class is thread-safe, while HashMap isn't. But I think this should not be a problem here, as during initPhase1(), as far as I know, no threads apart from main thread are started yet (is this true?), so anyone accessing getSavedProperty(ies) will either be the main thread itself or a thread started afterwards, so there is a happens-before relationship.

If this is true, then we could wrap the copy of saved properties with an unmodifiable map view before setting the savedProps field so that getSavedProperties() could always return the same instance. Like for example in the following alternative change:

http://cr.openjdk.java.net/~plevart/jdk9-dev/8177845_VM.getSavedProperties/webrev.01/

What do you think?

Regards, Peter

On 04/19/2017 02:02 AM, Mandy Chung wrote:
On Apr 18, 2017, at 3:13 PM, Doug Simon <doug.si...@oracle.com> wrote:

Please review these changes that make jdk.internal.vm.compiler an upgradable 
compiler.
:
http://cr.openjdk.java.net/~dnsimon/8177845/
Thanks for making this change.  This would simplify the way to replace JDK’s 
graal with the lab graal.  A couple of comments:

jdk/internal/misc/VM.java

  161      * Note that the saved system properties do not include
  162      * the ones set by sun.misc.Version.init().

sun.misc.Version is no longer present in JDK 9.  Renamed to 
java.lang.VersionProps

jdk/vm/ci/services/Services.java
   67             Class.forName("jdk.vm.ci.runtime.JVMCI”);

JVMCI class is local in jdk.internal.vm.ci module.  An alternative may be
to provide a static initialize method rather than Class::forName.

jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java
  211         for (HotSpotJVMCIBackendFactory factory : 
ServiceLoader.load(HotSpotJVMCIBackendFactory.class)) {

This uses the thread context class loader to load providers.  Services::load 
uses
the system class loader to load providers.  I suspect you want this to use the
system class loader here too.

jdk/vm/ci/services/JVMCIServiceLocator.java
   78         for (JVMCIServiceLocator access : 
ServiceLoader.load(JVMCIServiceLocator.class)) {

Same comment as above. I think you want to use system class loader to load 
providers.

Mandy

Reply via email to