【问题标题】:Java 8 lambda expression bytecode consistencyJava 8 lambda 表达式字节码一致性
【发布时间】:2016-10-16 01:08:32
【问题描述】:

我一直在研究由我的 OpenJDK 编译器编译的 Java lambda 表达式字节码,我想知道,lambda 表达式字节码会因编译器/运行时而异吗?我想知道我的检查逻辑是否可以跨平台工作。

【问题讨论】:

  • 您到底想检查什么?请特别注意,如果 Groovy 3 编译器启动,由于它支持 Java 8 风格的 lambda,它可能会发出 显着 不同的字节码。
  • openjdk 的 javac 并不是唯一存在的 java 编译器,例如 ecj 是一个常用的替代方案。

标签: java java-8 bytecode java-bytecode-asm


【解决方案1】:

lambda 表达式字节码是否会因编译器/运行时而异?

理论上是的。 JLS 没有指定必须生成特定的字节码/序列。

您需要检查现有 Java 8 和 Java 9 编译器发出的字节码,以了解它们之间的差异。 (这并没有告诉您尚未编写的编译器/版本!)

我想知道我的检查逻辑是否可以跨平台工作。

解决方案应该是构建一套全面的测试用例,并针对您想要支持的所有 Java 编译器生成的代码运行它们。

简而言之:测试一下。

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 2014-06-01
    • 2015-06-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多