旧的编译代码是否受益于最新jre上的紧凑字符串?

时间:2017-09-29 18:39:21

标签: java performance bytecode

假设我有一些以前版本编译器编译的旧代码。它会从改进String类减少内存消耗中获益还是需要使用最新的jdk重新编译它?

1 个答案:

答案 0 :(得分:1)

,旧字节码将受益于Compact String优化而无需重新编译。这是因为它改变了String类本身的实现。字节码格式仍然相当高,并抽象出字符串,对象等的实际实现。

然而,还有另一个变化(JEP280)需要重新编译才能从中受益。在以前的Java版本中,非常量字符串连接被编译为一系列对StringBuilder(或StringBuffer)的调用。因此"I have " + i + " cats"之类的代码等同于new StringBuilder().append("I have ").append(i).append(" cats").toString()。 JEP280对此进行更改以将串联编译为invokedynamic指令,这实际上将字符串连接的实现移动到在运行时选择的库中。这本身并不是一种优化,但它允许在将来添加更有效的字符串连接而无需重新编译。

相关问题