java - java对象的内存预留

标签 java c++ memory

我知道在 C++ 中声明对象实例时是这样的:

Object object

调用对象构造函数并为该对象提供内存,但是我发现当您在 java 中执行此操作时,对象实例没有值,直到:

object = new Object()

写了。我想具体知道什么时候为对象提供内存。我认为构造和 new 关键字都分配了内存,所以 Object object = new Object() 似乎是多余的。我在 oracle 的网站上看到声明“保留”内存和新的“分配”内存,我想知道这两者之间有什么区别。

最佳答案

您需要区分变量 所需的空间和对象 所需的空间。请记住,变量的值只是一个引用——非常像 C++ 中的指针。所以如果你有:

Object x = null;

那么变量x本身就占用了足够的引用空间(通常是4或8字节)。现在,如果您有:

x = new Object();

创建一个对象 - x 的值现在是对新创建对象的引用。 x 本身占用的空间与以前相同,但对象本身也需要空间(主要是字段、对象类型的引用以及同步和内部数据)保持)。

关于java - java对象的内存预留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29633618/

相关文章:

c++ - 当我不输出变量时代码中断;当我这样做的时候工作。什么?

linux - 虚拟内存澄清——大连续内存的分配

java - Spring Security 记住我身份验证

java - 执行线程在主类完成后继续运行

c++ - 使用 map 类型创建 gcc 错误 : expected unqualified-id before ‘for’

iPhone - 应用内购买 : recording the purchase

c++ - 找出内存被消耗的地方

java - 为什么这段代码会进入我的方法的错误 block ?

java - Macos镜像中appVeyor中AdoptOpenJDK 8.232的安装路径是什么?

c++ - 从 OpenMP 线程调用时,OpenGL 调用段错误