< prev index next >

src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java

Print this page
*** 23,10 ***
--- 23,11 ---
   * questions.
   */
  
  package java.lang.invoke;
  
+ import jdk.internal.misc.CDS;
  import jdk.internal.misc.Unsafe;
  import jdk.internal.vm.annotation.ForceInline;
  import jdk.internal.vm.annotation.Stable;
  import sun.invoke.util.ValueConversions;
  import sun.invoke.util.VerifyAccess;

*** 866,13 ***
          nf = NFS[func] = createFunction(func);
          assert(InvokerBytecodeGenerator.isStaticallyInvocable(nf));
          return nf;
      }
  
!     private static final MethodType OBJ_OBJ_TYPE = MethodType.methodType(Object.class, Object.class);
  
!     private static final MethodType LONG_OBJ_TYPE = MethodType.methodType(long.class, Object.class);
  
      private static NamedFunction createFunction(byte func) {
          try {
              switch (func) {
                  case NF_internalMemberName:
--- 867,30 ---
          nf = NFS[func] = createFunction(func);
          assert(InvokerBytecodeGenerator.isStaticallyInvocable(nf));
          return nf;
      }
  
!     private static final MethodType OBJ_OBJ_TYPE;
+     private static final MethodType LONG_OBJ_TYPE;
+     private static @Stable MethodType[] archivedObjects;
  
!     static {
+         CDS.initializeFromArchive(DirectMethodHandle.class);
+         if (archivedObjects != null) {
+             OBJ_OBJ_TYPE = archivedObjects[0];
+             LONG_OBJ_TYPE = archivedObjects[1];
+         } else {
+             OBJ_OBJ_TYPE = MethodType.methodType(Object.class, Object.class);
+             LONG_OBJ_TYPE = MethodType.methodType(long.class, Object.class);
+         }
+     }
+ 
+     static void dumpSharedArchive() {
+         archivedObjects = new MethodType[2];
+         archivedObjects[0] = OBJ_OBJ_TYPE;
+         archivedObjects[1] = LONG_OBJ_TYPE;
+     }
  
      private static NamedFunction createFunction(byte func) {
          try {
              switch (func) {
                  case NF_internalMemberName:
< prev index next >