优化 Java 对象以提高 CPU 高速缓存行效率
2022-09-04 03:24:47
我正在编写一个库,其中:
- 它需要在各种不同的平台/Java实现上运行(常见的情况可能是在带有Windows或Linux的Intel 64位机器上的OpenJDK或Oracle Java)
- 实现高性能是重中之重,因为我关心对象访问中的 CPU 缓存行效率
- 在某些区域,将遍历/处理相当大的小对象图形(假设大约1GB比例)
- 主要工作负载几乎完全是读取
- 读取将分散在对象图中,但不是完全随机的(即将有明显的热点,偶尔读取到访问频率较低的区域)
- 对象图将由多个线程同时访问(但不会修改)。没有锁定,前提是不会发生并发修改。
是否有一些经验法则/指南来设计小对象,以便它们在这种环境中有效地利用CPU缓存行?
我对正确调整对象的大小和结构特别感兴趣,以便例如最常访问的字段适合第一个缓存行等。
注意:我完全意识到这取决于实现,我需要进行基准测试,以及过早优化的一般风险。无需浪费任何进一步的带宽来指出这一点。:-)