JVM和CLR分配优化

rep*_*vsd 2 stack jvm memory-management allocation

当运行时显然对象生存期限于某个范围时,JVM和.NET VM是否在堆栈上分配对象?

Ste*_*e K 5

JVM就是这样做的.在适当的情况下,它实际上可以完全删除分配.

引用这篇文章.

Java语言没有提供任何在堆栈上显式分配对象的方法,但这一事实并不妨碍JVM在适当的地方仍然使用堆栈分配.JVM可以使用一种称为转义分析的技术,通过该技术,它们可以判断某些对象在其整个生命周期内仍然局限于单个线程,并且该生命周期受给定堆栈帧的生命周期的限制.可以在堆栈而不是堆上安全地分配这些对象.更好的是,对于小型对象,JVM可以完全优化分配,并简单地将对象的字段提升到寄存器中.

有关维基百科的逃逸分析的更多信息.

  • Java 6更新14,您必须使用命令行选项启用它.(-XX:+ DoEscapeAnalysis).看起来它在更新18中被删除,然后在更新21中再次添加回来.我不确定命令行选项是否仍然是必需的 - 但我会使用它只是安全的. (2认同)