JDK 7的哪些特性(不包括invokedynamic,因为它不被java使用)导致了新的类文件版本与JDK 6不兼容。它看起来所有的特性都可以通过编译器生成胶水代码来实现。例如,switch语句中的字符串可以使用编译器生成的重复ifeq语句来实现。我希望能够为编译器提供JRE1.7JDK1.6标志,以与-source 6兼容,同时使用JDK7中的项目币功能。
发布于 2011-10-02 03:28:31
我还没有读过编译器的代码,但是一些新特性显然会对字节码产生影响。
“简化的varargs方法调用”实际上只是一种警告抑制,但它必须在字节码中留下一些标记,以便客户端代码能够以不同的方式显示警告。
"Try-with-resources“生成的代码可以处理一个正常的异常,以及在finally块期间抛出的第二个异常。额外的异常是使用新的addSuppressed()方法存储的。这并不完全是类文件格式的改变,但它显然不能在早期的VM上工作。
"Multi-catch“生成的字节码与以前的编译器生成的字节码略有不同。现在,异常表中的多个条目将指向相同的catch正文。
发布于 2011-07-15 04:22:39
因此,让我确保我理解了这一点。您希望在应用程序中针对不同的JRE而不是所有其他类运行特定的类吗?我认为,如果每次使用不想使用不同版本的类时,都启动一个单独的JVM,那么在理论上这是可能的。这将涉及相当于在互不相交的应用程序中的两个JVM之间传递信息的复杂程度。它不是以这种方式工作的,因为6中的执行环境不会知道项目硬币的特性。IIRC你不能在1.4运行时使用泛型,那么这有什么不同呢?归根结底,这似乎真的不值得,然后再说一次,也许我完全误解了你的观点。
https://stackoverflow.com/questions/6699347
复制相似问题