在Java中的堆栈存储器上创建对象?


问题内容

出于好奇,这只是一个简单的理论问题。我一直像一个Java迷男孩。但是有一件事让我怀疑为什么Java不提供在堆栈上创建对象的机制?如果我可以在堆栈上创建小的Point(int
x,int y)对象而不是像在C#上创建结构那样的堆,效率会更高。java中的此限制背后是否有任何特殊的安全原因?:)


问题答案:

这里的策略是Java不会将这个决定泄漏给语言,而是让JVM / Hotspot / JIT / runtime决定在哪里以及如何分配内存。

正在进行使用“转义分析”的研究,以找出实际上并不需要将哪些对象放入堆并对其进行堆栈分配的对象。我不确定这是否已经使其成为mainstrem
JVM。但是,如果是这样,它将由运行时(东西-XX:something)而不是开发者来控制。

这样做的好处是,即使是旧代码也可以从这些将来的增强功能中受益,而无需对其本身进行更新。

如果您想手动管理它(但是仍然让编译器检查它是否保持“安全”),请看一下Rust。