在java中的堆栈内存上创建对象?

出于好奇,这只是一个简单的理论问题。 我一直都喜欢java风扇男孩。 但有一件事让我想知道为什么java不提供在堆栈上创建对象的机制? 如果我可以在堆栈而不是堆上创建小的Point(int x,int y)对象,就像在C#上创建结构一样,那会不会更有效率。 在java中这个限制背后有什么特殊的安全原因吗? 🙂

这里的策略是,不要将这个决定泄露到语言中,Java让JVM / Hotspot / JIT / runtime决定它想要分配内存的位置和方式。

有研究正在使用“逃逸分析”来确定哪些对象实际上不需要进入堆并堆栈分配它们。 我不确定这是否已经成为一个主要的JVM。 但如果确实如此,它将由运行时(事物-XX:某事物)控制,而不是开发人员。

这样做的好处是,即使是旧代码也可以从这些未来的增强中受益,而无需自行更新。

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

这暂时将来到Java,没有真正的ETA设置,所以你只能希望它将来自Java 10。

该提议称为价值类型,您可以在Project Valhalla的邮件列表中关注它。

我不知道是否有任何先前的原因,为什么它首先不是语言,也许最初它被认为是不需要的或根本没有时间实现这一点。

一个常见的问题是使用在堆栈上创建的对象初始化一些全局引用。 当创建对象的方法退出时,您指向什么?

所说的对象是用Java在堆栈上创建的,它只是在你的背后使用转义分析来完成 ,这确保了上述场景不会发生。