Loading classes during VM shutdown

David Holmes david.holmes at oracle.com
Sun Oct 20 22:29:11 UTC 2019


Hi Ioi,

On 19/10/2019 3:36 am, Ioi Lam wrote:
> For JDK-8232081 (Try to link all classes with ArchiveClassesAtExit), 
> when creating a dynamic CDS archive, I need to link all classes in the 
> "loaded" state. I am thinking of doing it at this point:
> 
> src/java.base/share/classes/java/lang/Shutdown.java:
> 
>      private static void runHooks() {
>          synchronized (lock) {
>              /* Guard against the possibility of a daemon thread 
> invoking exit
>               * after DestroyJavaVM initiates the shutdown sequence
>               */
>              if (VM.isShutdown()) return;
>          }
> 
>          for (int i=0; i < MAX_SYSTEM_HOOKS; i++) {
>              try {
>                  Runnable hook;
>                  synchronized (lock) {
>                      // acquire the lock to make sure the hook 
> registered during
>                      // shutdown is visible here.
>                      currentRunningHook = i;
>                      hook = hooks[i];
>                  }
>                  if (hook != null) hook.run();
>              } catch (Throwable t) {
>                  if (t instanceof ThreadDeath) {
>                      ThreadDeath td = (ThreadDeath)t;
>                      throw td;
>                  }
>              }
>          }
> 
> +       VM.linkClassesIfDumpingDynamicArchive(); <<<<<<<<
> 
>          // set shutdown state
>          VM.shutdown();
>      }
> 
> To be safe, I will only link classes loaded by the built-in loaders 
> (boot/platform/system). The reasons is linking classes may result in 
> more class loading, which would execute Java code in the class loaders. 
> I worry that arbitrary custom class loaders may not work well when 
> executed in this context, but the built-in loader should be OK. After 
> all, regular Shutdown hooks could (I think??) load classes ....
> 
> Does anyone see a problem with doing this?

When you say "built-in" do you mean all of the boot/platform/app loaders?

Any non-trivial execution of Java code could potentially have a bad 
interaction if run after shutdown hooks have completed.

Cheers,
David

> Thanks
> - Ioi


More information about the core-libs-dev mailing list