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

问题描述:

假设我有一些旧版代码编译器编译的代码。它会从改进String减少内存消耗得到好处,或者我需要用最新的jdk重新编译它吗?旧的编译代码是否受益于最新jre上的紧凑字符串?

+0

对类的内部工作原理的更改允许使用它们的所有其他类从这些更改中受益。这就是OOP封装和使用库的全部要点。 – Holger

,旧字节码将受益于紧凑字符串优化而无需重新编译。这是因为它改变了String类本身的实现。字节码格式仍然是相当高的水平,并且抽象出字符串,对象等的实际实现。但是,还有另一个变化(JEP280),它需要重新编译才能从中受益。在以前的Java版本中,非常数字符串连接被编译为一系列对StringBuilder(或StringBuffer)的调用。所以像"I have " + i + " cats"这样的代码将相当于new StringBuilder().append("I have ").append(i).append(" cats").toString()。 JEP280改变了这一点,以将连接编译为invokedynamic指令,这实际上将字符串连接的实现移动到运行时选择的库中。这不是一个优化本身,但它允许在未来重新编译时添加更高效的字符串连接。