具有lambda的Java本地类在不同的机器上表现不同,为什么?

时间:2017-01-31 16:50:07

标签: java lambda

以下代码在2台不同的机器上执行。在一台机器上,它执行没有任何问题,但它会抛出另一个java.lang.VerifyError。请注意,两台机器上的JVM版本相同(jdk_8u20_x64)。

@Test
public void testLocal() throws Exception {
    class Foo implements Runnable {
        @Override public void run() {}
    }

    List<String> values = Collections.emptyList();
    List<Runnable> runnables = new ArrayList<>();

    values.forEach(r -> runnables.add(new Foo()));
}
  • 机器1上的处理器:英特尔代码i5 CPU 650 @ 3.20GHz
  • 机器2上的处理器:英特尔代码i7-6820HQ CPU @ 2.70GHz

一台机器1,代码块执行正常但在机器2上,它抛出&#34; java.lang.VerifyError:操作数堆栈上的错误类型&#34;

我当然可以重写代码以使其在两种情况下都能正常工作,但我很想知道为什么这段代码会显示出不稳定的行为。

更新:根据Mark Rotteveel的建议,我尝试使用最新的JDK(jdk_8u112_x64)运行此代码。在这两台机器上,代码运行得很好。

0 个答案:

没有答案