Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以强制将对象存储在堆中吗?_Java_Memory - Fatal编程技术网

Java 可以强制将对象存储在堆中吗?

Java 可以强制将对象存储在堆中吗?,java,memory,Java,Memory,这只是为了我的理解。作为类成员的对象进入堆,而本地变量和值类型进入堆栈。是否存在将对象强制推入堆栈或堆的用例和可能性?否,Java不允许直接访问内存。我不认为有这样的用例。在C++中,这是不可能的,其中某些规则适用于保存对象的位置。为此,您需要实现自己的内存管理例程,这将是一个繁琐且依赖于平台的过程。是和否-我认为这里存在概念上的误解 如果通过强制堆上的对象,您的意思是希望它即使在调用创建它的方法之后仍保持“活动”,那么是的。您只需保留对它的引用 如果在堆上强制一个对象,您的意思是您想指定该对象

这只是为了我的理解。作为类成员的对象进入堆,而本地变量和值类型进入堆栈。是否存在将对象强制推入堆栈或堆的用例和可能性?

否,Java不允许直接访问内存。我不认为有这样的用例。在C++中,这是不可能的,其中某些规则适用于保存对象的位置。为此,您需要实现自己的内存管理例程,这将是一个繁琐且依赖于平台的过程。

是和否-我认为这里存在概念上的误解

如果通过强制堆上的对象,您的意思是希望它即使在调用创建它的方法之后仍保持“活动”,那么是的。您只需保留对它的引用


如果在堆上强制一个对象,您的意思是您想指定该对象的内存从何处分配,那么就不是(没有一些jni时髦的东西)

在Java中,使用new分配的所有内容都是从堆中分配的。基本类型的局部变量是从堆栈中分配的

作为类成员的对象 堆成一堆

不。对象进入堆中

。。。而局部变量和值 类型[转到]堆栈

否。所有局部变量都在堆栈上分配。如果它们是对对象的引用,则相关对象在堆中(如果它们存在)

是否有使用案例和可能性 将对象推送到堆栈或堆 强行


不,你不需要。所有对象都在堆上分配。

这些是旧规则。逃逸分析改变了这一点。“对象”可能在堆栈上。不过,除了性能上的差异外,您不应该注意到这些差异。@Thomas谢谢!很高兴看到你每天都能学到新东西。。。似乎escape分析仍处于实验状态,在启动vm时必须显式启用它,对吗?因为它不是必需的,所以没有“用例”。见我下面的答复。关于C++的注释也不正确——你可以在堆栈上专门分配一个对象,我已经编写了其他应用程序。