Review Request JDK-8164512: Replace ClassLoader use of finalizer with phantom reference to unload native library

Peter Levart peter.levart at
Tue Oct 10 09:29:04 UTC 2017

On 10/09/2017 10:17 PM, mandy chung wrote:
> David, Peter, Alan
> The VM has a fast path to search the symbol from first for 
> bootstrap loader.  That was the case I mostly concern about 
> performance and it's not impacted by this change.   Also I consulted 
> with Claes on the performance impact.   I took your suggestion and 
> made systemNativeLibraries and nativeLibraries volatile.
> Updated webrev:

Looks good now. Just one question (for a possible follow-up future 

2674     private static long findNative(ClassLoader loader, String name) {
2675         Map<String, NativeLibrary> libs =
2676             loader != null ? loader.nativeLibraries() : 
2677         if (libs.isEmpty())
2678             return 0;
2680         // the native libraries map may be updated in another thread
2681         // when a native library is being loaded.  No symbol will be
2682         // searched from it yet.
2683         for (NativeLibrary lib : libs.values()) {
2684             long entry = lib.findEntry(name);
2685             if (entry != 0) return entry;
2686         }
2687         return 0;
2688     }

Now that (system)nativeLibraries is a Map, is it still necessary to 
iterate it and call lib.findEntry(name) on each NativeLibrary until the 
one that returns a non-zero entry or would it be semantically equivalent 
to 1st look-up the Map by the 'name' key to get the correct NativeLibrary?

Regards, Peter

More information about the core-libs-dev mailing list