相关疑难解决方法(0)

创建数百万个小型临时对象的最佳实践

创建(和发布)数百万个小对象的"最佳实践"是什么?

我正在用Java编写国际象棋程序,搜索算法为每个可能的移动生成一个"移动"对象,名义搜索每秒可以轻松生成超过一百万个移动对象.JVM GC已经能够处理我的开发系统上的负载,但我有兴趣探索以下方法:

  1. 最大限度地减少垃圾收集的开销,并且
  2. 减少低端系统的峰值内存占用.

绝大多数对象都是非常短暂的,但生成的大约1%的移动是持久化并作为持久值返回,因此任何池化或缓存技术都必须能够排除特定对象的重用.

我不希望完整的示例代码,但我希望进一步阅读/研究的建议,或类似性质的开源示例.

java garbage-collection

109
推荐指数
7
解决办法
2万
查看次数

Java中的逃逸分析

据我所知,JVM使用转义分析进行一些性能优化,如锁定粗化和锁定省略.我很感兴趣,如果JVM有可能决定使用转义分析在堆栈上分配任何特定对象.

一些资源让我觉得我是对的.有JVM实际上做到了吗?

java stack allocation escape-analysis

37
推荐指数
2
解决办法
2万
查看次数

什么时候Hotspot可以在堆栈上分配对象?

从Java 6的某个地方开始,Hotspot JVM可以进行转义分析并在堆栈上而不是在垃圾收集堆上分配非转义对象.这导致生成的代码加速并减少垃圾收集器的压力.

Hotspot何时能够堆叠分配对象的规则是什么?换句话说,我什么时候可以依靠它来进行堆栈分配?

编辑:这个问题是重复的,但是(IMO)下面的答案比原始问题提供的答案更好.

java jvm jvm-hotspot compiler-optimization stack-allocation

13
推荐指数
1
解决办法
1837
查看次数

JAVA 9 及更高版本中的逃逸分析和堆栈分配优化改进

HotSpot Java 9-13 的堆栈分配优化规则是否不太严格?

在 Java 7 和 Java 8 HotSpot 中,对象的堆栈分配(由于称为标量对象替换的 JVM 优化)是可能的,但要在线程堆栈上实现无垃圾分配,必须满足许多严格的约束。

针对 Java 8(HotSpot、OpenJDK 8)启用堆栈分配优化的规则总结在这个问题的精彩回答中: Hotspot 什么时候可以在堆栈上分配对象? 至于 Java 7,这里: Eligibility for escapeanalysis/stack allocate with Java 7

在这个问题中,我想了解较新的 JDK 版本中 EA 和堆栈分配优化的当前状态是什么?其他 Java VM(例如 OpenJ9)是否有不同的规则?

java jvm compiler-optimization escape-analysis stack-allocation

5
推荐指数
0
解决办法
934
查看次数