我写了一个小的基准测试性能java.lang.invoke.MethodHandle,java.lang.reflect.Method和方法的直接调用.
我读到的MethodHandle.invoke()表现几乎与直接通话相同.但我的测试结果显示另一个:MethodHandle调用比反射慢大约三倍.我的问题是什么?可能这是一些JIT优化的结果?
public class Main {
public static final int COUNT = 100000000;
static TestInstance test = new TestInstance();
static void testInvokeDynamic() throws NoSuchMethodException, IllegalAccessException {
int [] ar = new int[COUNT];
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodType mt = MethodType.methodType(int.class);
MethodHandle handle = lookup.findStatic(TestInstance.class, "publicStaticMethod", mt) ;
try {
long start = System.currentTimeMillis();
for (int i=0; i<COUNT; i++) {
ar[i] = (int)handle.invokeExact();
}
long stop = System.currentTimeMillis();
System.out.println(ar);
System.out.println("InvokeDynamic time: " + …Run Code Online (Sandbox Code Playgroud) 有没有办法匹配scala中的字符串,如下所示:
def matcher(arg: String) : Expr = {
case left :: '*' :: right => new Binary("*", left, right)
case left :: '+' :: right => new Binary("+", left, right)
}
Run Code Online (Sandbox Code Playgroud)
哪里左右都有String类型?
我有两个字符数组,看起来像这样:
a,b,c,d,e,f,g
k,e,y
我需要将第一个数组中的每个元素与第二个元素相关联,如下所示:
A-> K,
B-> E,
C-> Y,
D-> K,
E-> E,
F-> Y,
G->ķ
但不知道如何在功能风格中实现这一点.任何帮助将不胜感激!