JDK 7类文件向后兼容JDK 6

时间:2011-07-14 20:09:55

标签: java java-7

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

2 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:0)

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