java - Java JIT编译可以在返回始终相同的值时优化方法吗?
问题描述
在我的 Java 应用程序中,我有一些方法总是返回相同的东西。那么,JIT 是否能够检测到这些方法并优化性能(克隆结果而不是计算结果或其他方式)?
优化候选方法的示例:
private List<String> get() {
return Arrays.asList(Operation.values()).stream().map(Object::toString).collect(Collectors.toList());
}
在我看来这是不可能的,但我不确定。
解决方案
公共子表达式消除(CSE) 是一种众所周知的编译器优化,用于避免重新计算相同的表达式。一般来说,JVM 能够进行这样的优化。
但这不是你的情况。给定的get()
方法不会返回相同的东西。
首先,假设Operation
是枚举类型,Operation.values()
每次都返回一个新数组。它必须返回一个新对象以保护原始数组不被修改。
Collectors.toList()
ArrayList
在其当前的实现中也每次返回一个新的。JVM 无法对此分配做任何事情,因为返回的对象在外部可见。
推荐阅读
- google-cloud-platform - GCP - 基于服务可用性的负载平衡
- javascript - 无法延迟加载视频
- laravel-8 - 政策在模块中的 laravel 中不起作用
- spring-cloud-dataflow - 部署 SCDF 时没有平台配置错误
- string - 在 Bigquery 中操作 dict 值
- javascript - 子组件如何强制其父组件重新加载?反应.js
- amazon-web-services - AWS:用于 SecretManager 和 AppConfig 的 Lambda、VPC 和端点
- java - Cloud Profiler - 列出从 Java 代理创建的配置文件
- java - 通过最小限度地删除和添加边将无向图转换为树
- sql - 将 SQL 查询放在 case 表达式中