在java的堆栈内存上创建对象?
2022-09-02 12:53:11
这只是出于好奇而提出的一个简单的理论问题。我一直像一个java粉丝男孩。但是有一件事让我想知道为什么java不提供在堆栈上创建对象的机制?如果我可以在堆栈上创建小的Point(int x,int y)对象,而不是像在C#上创建结构那样的堆,那不是更有效率吗?在java中,这种限制背后有什么特殊的安全原因吗?:)
这只是出于好奇而提出的一个简单的理论问题。我一直像一个java粉丝男孩。但是有一件事让我想知道为什么java不提供在堆栈上创建对象的机制?如果我可以在堆栈上创建小的Point(int x,int y)对象,而不是像在C#上创建结构那样的堆,那不是更有效率吗?在java中,这种限制背后有什么特殊的安全原因吗?:)
这里的策略是,Java不是将此决定泄漏到语言中,而是让JVM/Hotspot/JIT/runtime决定它想要分配内存的位置和方式。
有研究正在使用“逃逸分析”来找出哪些对象实际上不需要进入堆并堆叠分配它们。我不确定这是否已经成为主要的JVM。但是如果是这样,它将由运行时(-XX:something)控制,而不是由开发人员控制。
这样做的好处是,即使是旧代码也可以从这些未来的增强功能中受益,而无需更新本身。
如果你想手动管理它(但仍然让编译器检查它是否保持“安全”),看看Rust。
这将暂时来到Java,没有真正的ETA集,所以你只能希望它能通过Java 10出现。
该提案称为“价值类型”,您可以在Valhalla项目的邮件列表中关注它。
我不知道是否有任何先前的原因,为什么它首先不在语言中,也许最初它被认为是不必要的,或者根本没有时间实现它。