g8t*_*aul 127 java performance java-8
我有一个使用Java 7编写的旧应用程序.它在Java 8 JRE中运行良好.我不打算重写任何代码来使用Java 8功能.将已编译的代码升级到最新的Java 8 JDK是否有任何技术优势?
为了清楚起见,代码目前使用Java 7编译,并且已经使用最新的Java 8 JRE运行.它应该已经从Java 8运行时改进中受益.这个问题是通过编译版本8和运行Java 8编译的字节代码是否可以获得任何好处.
此外,我不关心开发人员生产力等非技术性好处.我认为这些很重要但不是这个问题的重点.我要求没有开发团队的生产代码.它纯粹处于维护模式.
And*_*rew 82
如果我正确理解了这个问题,你想知道javac在Java 8中生成的字节码是否比在Java 7中"更好".
答案可能不是,他们不断修复编译器中的错误,有时会导致更高效的字节码.但据我所知,你不会从Java 8的这些修复中看到任何显着的加速,更改日志只列出版本之间的两个主要变化.
oracle网站很糟糕,我似乎无法获得与javac版本之间相关的错误修正列表,但这里有一个来自OpenJDK的非穷举.我能找到的大多数都是修复错误.因此,通过更新到Java 8,由于javac更加正确地遵循JLS,它有可能不再编译,并且字节码几乎没有"改进".
Pet*_*rey 21
主要的好处是Java 8有最新的错误修复,因为Java 7没有公开更新.
此外,如果您要在Java 8 JVM上运行代码,您可能只安装了一个版本的Java.
Java 8可能更快,并且它更好地支持G1等新功能.但是,对于您的用例可能会更慢,因此唯一的方法是测试它.
将已编译的代码升级到最新的Java 8 JDK是否有任何技术优势?
如果您在询问在Java 8编译器中重新编译Java 7代码是否有任何好处,答案是; 几乎没有.
唯一微妙的区别是Java API存在细微差别,因此Java 8编译器可能会发现Java 7的细微差别
其他细微差别是文件开头的幻数,可能是常量池的顺序.字节代码基本相同,甚至为invokedynamicJava 7中存在的lambdas添加了支持,但只是没有那样使用.
Gho*_*ica 21
通过创造意识可以提供帮助.
切换到Java8时,您可能会发现javac发出了其他警告.示例:使用Java8极大地改进了类型推断.这可以消除当前代码库中对@SuppressWarnings注释的需求(当不再需要这样的注释时,编译器就会发出警告).
因此,即使您今天不打算修改代码库,切换到Java8也可以告诉您这些事情.增加知识有助于做出明智的决策.
另一方面:
长话短说:有一些微妙的优势和一定的风险(风险的重要性主要取决于你的整体设置).
我会为至少这些事实做些什么.
1)HashMap内部(在jdk-8下更快)
2)修复了许多可能对您透明的错误(运行时优化),这将使您的代码更快更好,而无需您实际执行任何操作.
3)G1垃圾收集器
编辑
从技术角度来看,这听起来更类似于时间前期编译或编译器可能通过更多地分析代码而改进的东西.据我所知,这些东西都没有在java 8编译器中完成.
从开发人员的角度来看 - 有很多.提高生产力对我来说是最重要的.
编辑2
我只知道与您的第二个查询匹配的两个点:
α参数
保留方法参数名称.
-轮廓
称为紧凑型材选件,占地面积更小.
| 归档时间: | 
 | 
| 查看次数: | 7849 次 | 
| 最近记录: |