On 14/01/2025 13:26, Code Ranger wrote:
In other words, you’re saying:
--add-opens java.base/java.time=json //this is bad, but the JDK
supports it because it’s unavoidable.
bootLayerController.addOpen(baseModule, "java.time", jsonModule) //this
is bad, the JDK will not support it because it’s bad, very bad,
unacceptably bad.
But I’m saying that these two solutions are equivalent—at least they
should be (I haven’t tested it). However, the second solution is more
flexible, convenient, and even safer. Yes, it is safer. Please, see this
SO answer that is the most upvoted - https://stackoverflow.com/a/70878195
The two solutions are not and cannot be equivalent in one very
significant aspect. In the first case JDK and JVM knows about the
opening of the module from bootstrap. In the second case they both find
out about it after some amount of running.
This has very significant consequences. If you only have to allow for
the first case then from the get go you can optimize execution on the
basis that private elements of closed modules are guaranteed to remain
private. If you have to allow for the second case then you either have
to avoid such optimizations or make them 'speculative' i.e. implement
them with a bail-out strategy which guarantees at the point where the
module is opened to trap and reset/undo any operations that is in
progress based on the speculation.
n.b. That's why we have a default policy of not allowing agents to be
loaded dynamically (absence of an agent on the command line is not
enough warning to the JDK/JVM).
regards,
Andrew Dinn
-----------
Red Hat Distinguished Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill