Hi Daniel,
On 4/12/2014 7:05 PM, Daniel Fuchs wrote:
On 12/4/14 4:37 AM, David Holmes wrote:
Once clarification please ...
On 4/12/2014 8:47 AM, Daniel Fuchs wrote:
Hi,
This is a review for a new test which has a different
implementation for JDK 8 & JDK 9
During the review of
JDK-8065552: setAccessible(true) on fields of Class may throw
a SecurityException,
it was remarked that such a test would be useful.
So here is such a test that loads all classes from the BCL, calls
getDeclaredFields() for each of them, and attempt to set
each field to accessible.
On JDK 8 and JDK 9 this is quite fast (~ 3.2sec when a security
manager is on).
The differences between 8 & 9 are limited to:
- ClassLoader:
- on 8 we use 'null' (BCL)
- on 9 we use the system class loader.
I haven't seen anything in JEP 220, regarding modules, that indicates
that classes currently loaded by the boot-loader will now be loaded
by the system classloader ???
In [1] towards the end:
[1] http://openjdk.java.net/jeps/220
"The defining class loader of the types in some existing packages
will change. Existing code that makes assumptions about the class
loaders of these types might not work correctly."
(then there is a list of specific changes).
This test looks up all class names in the image files and attempt
to load the corresponding class. But as indicated in [1]
some of these classes are now in the Boot CL, some in the
Extension CL, and some in the Application CL.
Yes but that is a small set of specific types. The boot classes are
still loaded by the boot loader.
So the test uses the System CL to load each class - which ensures
that the loading will be delegated to the appropriate ClassLoader.
It wasn't the use of the system loader to load the classes that I was
concerned about but the check whether cls.getClassLoader() was the
system loader - as it would not be for the boot classes.
David
best regards,
-- daniel
Thanks,
David
- Building the stream of class names:
- on 8 we have jars & folders in the boot class path
- on 9 we have .jimage files
webrev jdk8:
http://cr.openjdk.java.net/~dfuchs/webrev_8066612/webrev-jdk8.00/
webrev jdk9:
http://cr.openjdk.java.net/~dfuchs/webrev_8066612/webrev-jdk9.00/
best regards,
-- daniel
PS: For the curious I have also experimented with a version of this
test for JDK 7u [1] (where Streams have been replaced by Lists).
On 7 you need to either increase the PermGen size or split the
test into several invocations (the method I chose in [1]).
[1] don't review the link below - it's just for the record
if/when someone wants to backport on 7u...
http://cr.openjdk.java.net/~dfuchs/webrev_8066612/webrev-jdk7.00