以下代码在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,代码块执行正常但在机器2上,它抛出&#34; java.lang.VerifyError:操作数堆栈上的错误类型&#34;
我当然可以重写代码以使其在两种情况下都能正常工作,但我很想知道为什么这段代码会显示出不稳定的行为。
更新:根据Mark Rotteveel的建议,我尝试使用最新的JDK(jdk_8u112_x64)运行此代码。在这两台机器上,代码运行得很好。