[9 + 8u] RFR - 8066612: Add a test that will call getDeclaredFields() on all classes and try to set them accessible.
david.holmes at oracle.com
Thu Dec 4 11:50:28 UTC 2014
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:
>>> 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  towards the end:
>  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 
> 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.
> best regards,
> -- daniel
>>> - 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:
>>> webrev jdk9:
>>> best regards,
>>> -- daniel
>>> PS: For the curious I have also experimented with a version of this
>>> test for JDK 7u  (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 ).
>>>  don't review the link below - it's just for the record
>>> if/when someone wants to backport on 7u...
More information about the core-libs-dev