Java 可以强制将对象存储在堆中吗?
这只是为了我的理解。作为类成员的对象进入堆,而本地变量和值类型进入堆栈。是否存在将对象强制推入堆栈或堆的用例和可能性?否,Java不允许直接访问内存。我不认为有这样的用例。在C++中,这是不可能的,其中某些规则适用于保存对象的位置。为此,您需要实现自己的内存管理例程,这将是一个繁琐且依赖于平台的过程。是和否-我认为这里存在概念上的误解 如果通过强制堆上的对象,您的意思是希望它即使在调用创建它的方法之后仍保持“活动”,那么是的。您只需保留对它的引用Java 可以强制将对象存储在堆中吗?,java,memory,Java,Memory,这只是为了我的理解。作为类成员的对象进入堆,而本地变量和值类型进入堆栈。是否存在将对象强制推入堆栈或堆的用例和可能性?否,Java不允许直接访问内存。我不认为有这样的用例。在C++中,这是不可能的,其中某些规则适用于保存对象的位置。为此,您需要实现自己的内存管理例程,这将是一个繁琐且依赖于平台的过程。是和否-我认为这里存在概念上的误解 如果通过强制堆上的对象,您的意思是希望它即使在调用创建它的方法之后仍保持“活动”,那么是的。您只需保留对它的引用 如果在堆上强制一个对象,您的意思是您想指定该对象
如果在堆上强制一个对象,您的意思是您想指定该对象的内存从何处分配,那么就不是(没有一些jni时髦的东西) 在Java中,使用new分配的所有内容都是从堆中分配的。基本类型的局部变量是从堆栈中分配的 作为类成员的对象 堆成一堆 不。对象进入堆中 。。。而局部变量和值 类型[转到]堆栈 否。所有局部变量都在堆栈上分配。如果它们是对对象的引用,则相关对象在堆中(如果它们存在) 是否有使用案例和可能性 将对象推送到堆栈或堆 强行
不,你不需要。所有对象都在堆上分配。这些是旧规则。逃逸分析改变了这一点。“对象”可能在堆栈上。不过,除了性能上的差异外,您不应该注意到这些差异。@Thomas谢谢!很高兴看到你每天都能学到新东西。。。似乎escape分析仍处于实验状态,在启动vm时必须显式启用它,对吗?因为它不是必需的,所以没有“用例”。见我下面的答复。关于C++的注释也不正确——你可以在堆栈上专门分配一个对象,我已经编写了其他应用程序。