On 10/09/2017 10:20 AM, Alan Bateman wrote:
On 06/10/2017 20:37, mandy chung wrote:
:
The native libraries map is now created lazily with
synchronization. I keep the lazy initialization that will save to
create a CHM as many custom class loaders don't have native code. I
think it's a good saving. In addition, if we iniitialize the static
systemNativeLibraries at <clinit> time, it may want to avoid using
CHM as it changes the class initialization order.
Alternatively change nativeLibraries and systemNativeLibraries to
volatile so the synchronization is only needed to initialize them.
Otherwise this version (webrev.03) looks good to me.
-Alan
Yes Mandy, you could use volatile fields + double checked locking for
initialization. In addition, the initializers to 'null' value are not
needed / are a waste of instructions (the default is guaranteed by JLS):
2695 // Native libraries belonging to system classes.
2696 private static Map<String, NativeLibrary> systemNativeLibraries
= null;
2697
2698 // Native libraries associated with the class loader.
2699 private Map<String, NativeLibrary> nativeLibraries = null;
Regards, Peter