diff options
author | briangoetz <none@none> | 2013-10-29 12:45:18 -0400 |
---|---|---|
committer | briangoetz <none@none> | 2013-10-29 12:45:18 -0400 |
commit | d4b3814b6e9d060345d7e9068149d050fc1ee891 (patch) | |
tree | 7682c2db64f96f86f3a30307c23b6dec6ff84e37 /src | |
parent | 7204c6151ce4a5b8d8837dddfa4268e0f6ec0718 (diff) |
8024633: Lambda linkage performance - initialize generated class earlier
Reviewed-by: briangoetz, rfield
Contributed-by: sergey.kuksenko@oracle.com
Diffstat (limited to 'src')
-rw-r--r-- | src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java b/src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java index a989ddf0b..a85c505c0 100644 --- a/src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java +++ b/src/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java @@ -197,22 +197,20 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*; new PrivilegedAction<Constructor[]>() { @Override public Constructor[] run() { - return innerClass.getDeclaredConstructors(); + Constructor<?>[] ctrs = innerClass.getDeclaredConstructors(); + if (ctrs.length == 1) { + // The lambda implementing inner class constructor is private, set + // it accessible (by us) before creating the constant sole instance + ctrs[0].setAccessible(true); + } + return ctrs; } - }); + }); if (ctrs.length != 1) { throw new LambdaConversionException("Expected one lambda constructor for " + innerClass.getCanonicalName() + ", got " + ctrs.length); } - // The lambda implementing inner class constructor is private, set - // it accessible (by us) before creating the constant sole instance - AccessController.doPrivileged(new PrivilegedAction<Void>() { - @Override - public Void run() { - ctrs[0].setAccessible(true); - return null; - } - }); + try { Object inst = ctrs[0].newInstance(); return new ConstantCallSite(MethodHandles.constant(samBase, inst)); @@ -222,6 +220,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*; } } else { try { + UNSAFE.ensureClassInitialized(innerClass); return new ConstantCallSite( MethodHandles.Lookup.IMPL_LOOKUP .findStatic(innerClass, NAME_FACTORY, invokedType)); |