RFR: 8177845: Need a mechanism to load Graal

Peter Levart peter.levart at gmail.com
Wed Apr 19 07:37:38 UTC 2017


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.simon at 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



More information about the jigsaw-dev mailing list