在我的Java应用程序中,我有一些方法总是返回相同的内容。那么,JIT是否能够检测这些方法并优化性能(克隆结果而不是计算结果或其他方式)?
优化的候选方法示例:
private List<String> get() {
return Arrays.asList(Operation.values()).stream().map(Object::toString).collect(Collectors.toList());
}
在我看来,这是不可能的,但我不确定。
发布于 2018-09-19 07:26:14
Common subexpression elimination (CSE)是一种著名的编译器优化,可避免重复计算相同的表达式。一般而言,JVM能够实现这样的优化。
但这不是你的案子。给定的get()
方法不会返回,也会返回相同的内容。
首先,假设Operation
是枚举类型,每次Operation.values()
都会返回新的数组。它必须返回一个新对象以保护原始数组不被修改。
在当前的实现中,Collectors.toList()
每次也会返回一个新的ArrayList
。JVM无法对此分配做任何操作,因为返回的对象在外部可见。
https://stackoverflow.com/questions/52390299
复制相似问题