在我的Java应用程序中,我有一些方法总是返回相同的东西。那么,JIT是否能够检测这些方法并优化性能(克隆结果而不是计算或以其他方式计算)?
优化的候选方法示例:
private List<String> get() {
return Arrays.asList(Operation.values()).stream().map(Object::toString).collect(Collectors.toList());
}
在我看来,这是不可能的,但我不确定。
Common subexpression elimination(CSE)是一个众所周知的编译器优化,以避免重新计算相同的表达式。通常,JVM能够进行这样的优化。
但这不是你的情况。给定的get()
方法不会返回相同的内容。
首先,假设Operation
是枚举类型,Operation.values()
每次返回新数组。它必须返回一个新对象以保护原始数组不被修改。
Collectors.toList()
目前的实施也每次都会返回一个新的ArrayList
。 JVM无法对此分配执行任何操作,因为返回的对象在外部可见。