adn*_*911 14 java value-type stack-memory
出于好奇,这只是一个简单的理论问题.我一直都喜欢java风扇男孩.但有一件事让我想知道为什么java不提供在堆栈上创建对象的机制?如果我可以在堆栈而不是堆上创建小的Point(int x,int y)对象,就像在C#上创建结构一样,那会不会更有效率.在java中这个限制背后有什么特殊的安全原因吗?:)
Thi*_*ilo 15
这里的策略是,Java不是将这个决定泄露给语言,而是让JVM/Hotspot/JIT/runtime决定它想要分配内存的位置和方式.
有研究正在使用"逃逸分析"来确定哪些对象实际上不需要进入堆并堆栈分配它们.我不确定这是否已经成为一个主要的JVM.但如果确实如此,它将由运行时(事物-XX:某事物)控制,而不是开发人员.
这样做的好处是即使是旧代码也可以从这些未来的增强中受益,而无需自行更新.
如果您想手动管理(但仍然让编译器检查它是否"安全"),请查看Rust.
这将暂时出现在 Java 中,目前还没有真正的预计到达时间,所以你只能希望它会出现在 Java 10 中。
该提案称为“值类型”,您可以在 Valhalla 项目的邮件列表中关注它。
我不知道是否有任何先验原因说明为什么它最初没有用该语言,也许最初它被认为是不需要的,或者根本没有时间来实现它。