Hi Ryan,

First with regard to the mailing list for the RFR it is not the bug filing category that determines this (though there is usually a correlation) but the location of the files where you actually made changes. In this case, in the current form, as hotspot changes, it should have been reviewed on hotspot-runtime-dev. But I don't want this to be hotspot changes. :)

On 24/04/2019 12:47 am, Sciampacone, Ryan wrote:

Alan / David,

I agree this could have also been a class library only solution.  Looking at 
the problem I saw a few things:

- Just above the patched code in create_vm() there is similar code for a JSR 
292 deadlock problem where classes are pre-loaded as a solution.  I felt this 
matched the type of fix I was making here.
- There is plenty of other class pre loading / initialization done in 
create_vm()

The VM controls the basic bootstrapping initialization process** to get the core of the core libraries initialized in the right order so that the VM can execute the initialization code in a sane fashion. JSR-292 code is tightly connected to the VM, so are String, Class, and a bunch of others like exceptions. The FileSystem code is not part of this core and the VM doesn't need to know about it. This is a library problem that can and should be fixed in the library code.

** With the introduction of the module system a lot of this was pushed back into the Java library code itself.

- If there was a need to put an early switch on the pre-load of this class, I 
felt this be more natural to wrap that here

Not sure what you mean by "early switch", if you mean a flag to control whether or not to do the eager-initialization then a Java property could be used for that. Though I'd argue against making this optional unless there is a significant penalty for always doing the early init - is there?

Thanks,
David

- The problem doesn't exist at jdk9+ because the classes causing this problem get loaded and 
initialized as part of the initialization sequence "naturally" (ie: I see no indication 
that they are loaded to solve this specific problem).  I agree that jdk8 is unlikely to have 
dramatic changes in initialization moving forward, but putting it as part of (to me) the more 
streamlined create_vm() function made sense from a "safety" perspective as it felt more 
controlled and unlikely to be perturbed by any other change in the initialization code flow (class 
library or vm).

To follow on this last couple of points, as noted in the defect (and Brian Burkhalter 
also observes through running the reproducer test), this doesn't happen at jdk9+ because 
initialization has changed and the class got loaded "for free".  The reproducer 
test certainly applies to 13 (it's a valid check) but you can also eyeball the classes 
loaded and see the effect.

On 4/22/19, 11:42 PM, "Alan Bateman" <alan.bate...@oracle.com> wrote:

     On 22/04/2019 23:11, David Holmes wrote:
     > Hi Ryan,
     >
     > On 23/04/2019 7:04 am, Sciampacone, Ryan wrote:
     >>
     >> Bug: https://bugs.openjdk.java.net/browse/JDK-8194653
     >> Webrev: http://cr.openjdk.java.net/~phh/8194653/webrev.00/
     >
     > Why does this need to be pushed to the VM? Why not do the
     > pre-loading/initializing at the Java level?
     Ryan - do you have a test case that demonstrates the issue with the main
     line (jdk/jdk)? I think we need that in order to study this issue a bit
     more closely and see what options are available. I see Paul has pasted
     in a stack trace from January and I think it would be interesting to see
     what command line options were used. I don't have a good sense yet how
     this might be fixed but it may need work in FilePermission and/or
     initializing the default file system provider at a different time during
     the startup.
-Alan

Reply via email to