31 import jdk.internal.org.objectweb.asm.Opcodes; |
31 import jdk.internal.org.objectweb.asm.Opcodes; |
32 import jdk.internal.vm.annotation.ForceInline; |
32 import jdk.internal.vm.annotation.ForceInline; |
33 import jdk.internal.misc.Unsafe; |
33 import jdk.internal.misc.Unsafe; |
34 |
34 |
35 import java.lang.invoke.MethodHandles.Lookup; |
35 import java.lang.invoke.MethodHandles.Lookup; |
36 import java.security.AccessController; |
|
37 import java.util.*; |
36 import java.util.*; |
38 import java.util.concurrent.ConcurrentHashMap; |
37 import java.util.concurrent.ConcurrentHashMap; |
39 import java.util.concurrent.ConcurrentMap; |
38 import java.util.concurrent.ConcurrentMap; |
40 import java.util.function.Function; |
39 import java.util.function.Function; |
41 import sun.security.action.GetPropertyAction; |
40 import sun.security.action.GetPropertyAction; |
186 * Dump generated classes to disk, for debugging purposes. |
185 * Dump generated classes to disk, for debugging purposes. |
187 */ |
186 */ |
188 private static final ProxyClassesDumper DUMPER; |
187 private static final ProxyClassesDumper DUMPER; |
189 |
188 |
190 static { |
189 static { |
191 final String strategy = AccessController.doPrivileged( |
190 Properties props = GetPropertyAction.getProperties(); |
192 new GetPropertyAction("java.lang.invoke.stringConcat")); |
191 final String strategy = |
193 CACHE_ENABLE = Boolean.parseBoolean(AccessController.doPrivileged( |
192 props.getProperty("java.lang.invoke.stringConcat"); |
194 new GetPropertyAction("java.lang.invoke.stringConcat.cache"))); |
193 CACHE_ENABLE = Boolean.parseBoolean( |
195 DEBUG = Boolean.parseBoolean(AccessController.doPrivileged( |
194 props.getProperty("java.lang.invoke.stringConcat.cache")); |
196 new GetPropertyAction("java.lang.invoke.stringConcat.debug"))); |
195 DEBUG = Boolean.parseBoolean( |
197 final String dumpPath = AccessController.doPrivileged( |
196 props.getProperty("java.lang.invoke.stringConcat.debug")); |
198 new GetPropertyAction("java.lang.invoke.stringConcat.dumpClasses")); |
197 final String dumpPath = |
|
198 props.getProperty("java.lang.invoke.stringConcat.dumpClasses"); |
199 |
199 |
200 STRATEGY = (strategy == null) ? DEFAULT_STRATEGY : Strategy.valueOf(strategy); |
200 STRATEGY = (strategy == null) ? DEFAULT_STRATEGY : Strategy.valueOf(strategy); |
201 CACHE = CACHE_ENABLE ? new ConcurrentHashMap<>() : null; |
201 CACHE = CACHE_ENABLE ? new ConcurrentHashMap<>() : null; |
202 DUMPER = (dumpPath == null) ? null : ProxyClassesDumper.getInstance(dumpPath); |
202 DUMPER = (dumpPath == null) ? null : ProxyClassesDumper.getInstance(dumpPath); |
203 } |
203 } |