< prev index next >

src/java.base/share/classes/java/lang/ClassLoader.java

Print this page
*** 1,7 ***
  /*
!  * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved.
   * Copyright (c) 2019, Azul Systems, Inc. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
--- 1,7 ---
  /*
!  * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved.
   * Copyright (c) 2019, Azul Systems, Inc. All rights reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as

*** 59,10 ***
--- 59,11 ---
  import jdk.internal.loader.BuiltinClassLoader;
  import jdk.internal.loader.ClassLoaders;
  import jdk.internal.loader.NativeLibrary;
  import jdk.internal.loader.NativeLibraries;
  import jdk.internal.perf.PerfCounter;
+ import jdk.internal.misc.CDS;
  import jdk.internal.misc.Unsafe;
  import jdk.internal.misc.VM;
  import jdk.internal.reflect.CallerSensitive;
  import jdk.internal.reflect.CallerSensitiveAdapter;
  import jdk.internal.reflect.Reflection;

*** 2708,19 ***
          long offset;
          offset = unsafe.objectFieldOffset(k, name);
          return unsafe.compareAndSetReference(this, offset, null, obj);
      }
  
      /**
       * Called by the VM, during -Xshare:dump
       */
      private void resetArchivedStates() {
          if (parallelLockMap != null) {
              parallelLockMap.clear();
          }
!         packages.clear();
!         package2certs.clear();
          classes.clear();
          classLoaderValueMap = null;
      }
  }
  
--- 2709,53 ---
          long offset;
          offset = unsafe.objectFieldOffset(k, name);
          return unsafe.compareAndSetReference(this, offset, null, obj);
      }
  
+     static final boolean DEBUG = System.getProperty("leyden.debug.archived.packages") != null;
+ 
      /**
       * Called by the VM, during -Xshare:dump
       */
      private void resetArchivedStates() {
          if (parallelLockMap != null) {
              parallelLockMap.clear();
          }
! 
!         if (DEBUG) {
+             System.out.println(this + ": packages = " + packages.size());
+             for (Map.Entry<String, NamedPackage> entry : packages.entrySet()) {
+                 String key = entry.getKey();
+                 NamedPackage value = entry.getValue();
+                 System.out.print("Package ");
+                 System.out.print(key);
+                 System.out.print(" = ");
+                 System.out.println(value instanceof Package ? "Package" : "NamedPackage");
+             }
+         }
+         if (DEBUG) {
+             System.out.println("package2certs = " + package2certs.size());
+             for (Map.Entry<String, Certificate[]> entry : package2certs.entrySet()) {
+                 String key = entry.getKey();
+                 Certificate[] value = entry.getValue();
+                 System.out.print("Package ");
+                 System.out.print(key);
+                 System.out.print(" = ");
+                 System.out.println(value.length);
+             }
+         }
+         if (!CDS.isDumpingPackages()) {
+             if (DEBUG) {
+                 System.out.println("Reset packages/package2certs");
+             }
+             packages.clear();
+             package2certs.clear();
+         } else {
+             if (DEBUG) {
+                 System.out.println("Retained packages/package2certs");
+             }
+         }
          classes.clear();
          classLoaderValueMap = null;
      }
  }
  
< prev index next >