java 6 7 兼容_关于java:JDK 7类文件向后兼容JDK 6

JDK 7的哪些功能(不包括invokedynamic,因为它不被java使用)导致新的类文件版本不符合JDK 6.它表明所有功能都可以由生成粘合代码的编译器实现。 例如,switch语句中的String可以使用编译器生成的重复ifeq语句来实现。 我希望能够为编译器提供-source 1.7 -target 1.6标志以符合jre 6,同时在jdk 7中使用项目硬币功能。

如果你用javap查看字节码或使用反编译器并对使用JDK 7编译器生成的.class文件进行逆向工程,你会看到生成的代码"try with resource","binary literals","unserscore in literals","diamond" 运算符"也是有效的JRE 6代码。 但多次捕获是错误的。

现在JDK 7正式推出,它显然不支持将Java 7源代码编译为Java 6类文件:javac -source 1.7 -target 1.6 Test.java给出javac: source release 1.7 requires target release 1.7。 我也有兴趣了解为什么会这样。

请参见:oracle.com/technetwork/java/javase/compatibility-417013.html

"switch语句中的字符串可以使用重复的ifeq实现"。 实际上,为了性能,它会散列常量字符串并使用开关中的常量(使用if检查着陆)。 这对开发人员来说很难自己做。

我还没有读过编译器的代码,但是一些新功能显然必须对字节码产生影响。

"简化的varargs方法调用"实际上只是一个警告抑制,但它必须在字节码中留下一些标记,以便客户端代码可以以不同方式显示警告。

"Try-with-resources"生成的代码可以处理正常异常以及在finally块期间抛出的第二个异常。使用新的addSuppressed()方法存储额外的异常。这不是一个类文件格式更改,但它显然不适用于早期的VM。

"Multi-catch"还产生的字节码与以前的编译器产生的字节码略有不同。现在,异常表中的多个条目将指向相同的catch主体。

多捕获的东西并不重要,因为它仍然是有效的50.0字节码。

这里有一些建议:stackoverflow.com/a/18368608/166524

所以,让我确保我理解这一点。您希望在应用程序中针对不同的JRE运行特定的类,然后是所有其他类吗?我认为这在理论上是可行的,如果在每个类的使用中你不想使用不同的版本,你就可以启动一个单独的JVM。这将涉及一定程度的复杂性,相当于在不相交的应用程序中在两个JVM之间传递信息。开箱即用它不会这样工作,因为6中的执行环境不会知道项目硬币功能。 IIRC你不能在1.4运行时使用泛型,那么这有什么不同呢?在一天结束时,它似乎真的不值得,然后再次,也许我完全错过了你的观点。

同意Woot4Moo。为什么不重新编译JDK 7(特别是在月末发布时)?为什么留在6?你有没有指定的约束吗?即便如此,它可能比它的价值还要多。如果你想要像String开关这样的东西,那么只需编写简单的if-else语句。它们具有可读性,能够满足您的需求。

@ Woot4Moo - 我想你可能误解了这个问题。这听起来更像是OP希望在1.7编译器中使用COIN功能,同时仍然生成可以在1.6 JRE中运行的代码。 @Chris,为了兼容旧版本的Java JRE和库,有时候有充分的理由进行编译。

是的,正如安迪·托马斯 - 克莱默所说的那样,我想了解用1.7编译器指定-target 1.6并使用项目硬币功能无法编译的技术原因。

@Deniz他们是两个独立的运行时间。您如何期待汽车发动机在飞机上工作?如果针对Java6进行编译,则会获得Java6合规性,如果针对Java7进行编译,则可以获得Java7合规性。您可以针对多个版本进行编译的原因是,部署中无法保证每个人都具有相同的执行环境并且您希望注意它。

@ Woot4Moo我认为你的例子并不好。我完全知道我做不到,但我想知道JDK 7的哪些功能与JDK 6不向后兼容。从我的实验中我可以说尝试使用资源,二进制文字,数字下划线都可以。反编译的JDK 1.7类是完全有效的JDK 1.6类。这表明如果JDK 7编译器在.class文件中放置一个合适的类版本,它们将在JRE 6中工作。但是多捕获功能不向后兼容,反编译类错误。只需尝试反编译JDK 7功能并查看生成的代码。

@Deniz就像我对你原来的帖子所说的那样,JDK7尚未完成,所以一旦发布,这将是一个更好的问题。我认为你为自己做的工作比它值得做的更多,imo

@ Woot4Moo - 你没有回答这个问题,你的假设是假的。首先,在过去的Java版本中,使用-target标志编译早期的JRE既可行又有用。其次,JDK7预计将在两周内发布,最终候选版本可供使用。不再需要猜测。

@Andy一定要正确回答OP的问题,因为我没有这样做。

@ Woot4Moo - 我不知道答案。可以这么说。

如果有任何帮助,我找到了这个文档:download.oracle.com/javase/7/docs/technotes/tools/windows/。不确定这个论点/练习的重点是什么。你只是想弄清楚这些功能是如何兼容编译的,这一点并不明显。我想我通常只是尝试将编译目标定位到目标部署环境。如果代码可以在多个代码上运行,我们编写的代码符合早期版本。是的,我知道你可以在7上编译6。我们之前也做过。我只是不明白为什么这里争论.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle Database 12c Release 1 (12.1.0.1) JDBC Drivers SimpleFAN Download simplefan.jar (21,048 bytes) - Classes for subscribing to RAC events via ONS; simplefan policy and javadoc JDBC Thin for All Platforms Download demo.tar (686,080 bytes) - JDBC Demos (TAR format) Download demo.zip (614,561 bytes) -JDBC Demos (ZIP format) Download JavaDoc (7,103,997 bytes) Download README Download ojdbc6.jar (3,389,454 bytes) - For use with JDK 6; It contains the JDBC driver classes except classes for NLS support in Oracle Object and Collection types. Download ojdbc6_g.jar (5,382,573 bytes) - Same as ojdbc6.jar except compiled with "javac -g" and contains tracing code. Download ojdbc6dms.jar (4,033,913 bytes) - Same as ojdbc6.jar, except that it contains instrumentation to support DMS and limited java.util.logging calls. Download ojdbc6dms_g.jar (5,405,632 bytes) - Same as ojdbc6_g.jar except that it contains instrumentation to support DMS. Download ojdbc7.jar (3,397,734 bytes) - For use with JDK 7; It contains the JDBC driver classes except classes for NLS support in Oracle Object and Collection types. Download ojdbc7_g.jar (5,395,834 bytes) - Same as ojdbc7.jar except compiled with "javac -g" and contains tracing code. Download ojdbc7dms.jar (4,044,963 bytes) - Same as ojdbc7.jar, except that it contains instrumentation to support DMS and limited java.util.logging calls. Download ojdbc7dms_g.jar (5,419,088 bytes) - Same as ojdbc7_g.jar except that it contains instrumentation to support DMS. Download orai18n.jar (1,659,576 bytes) - Classes for NLS support Download xdb6.jar (263,690 bytes) - Classes to support standard JDBC 4.x java.sql.SQLXML interface (Java SE 6 & Java SE 7). 附件里的文件都可以在这里下载,只是不用再注册用户了: http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值