java 个对象的内存预留
Memory reservation for java objects
我知道在 C++ 中声明对象实例时是这样的:
Object object
调用对象构造函数并为该对象提供内存,但是我发现当您在 java 中执行此操作时,对象实例没有值,直到:
object = new Object()
写好了。我想具体知道什么时候为对象提供内存。我认为构造和 new 关键字都分配了内存,所以 Object object = new Object()
似乎是多余的。我在 oracle 的网站上看到声明 "reserves" 内存和新的 "allocates" 内存,我想知道两者之间有什么区别。
您需要区分 变量 所需的 space 和 对象 所需的 space ].请记住,变量的值只是一个引用——非常像 C++ 中的指针。所以如果你有:
Object x = null;
然后变量x
本身占用足够space作为引用(通常是4或8个字节)。现在如果你有:
x = new Object();
创建对象 - x
的值现在是对新创建对象的引用。 x
本身占用与以前相同数量的 space,但对象本身也需要 space(基本上是字段、对象类型的引用和数据用于同步和管理)。
声明保留内存:方法中的参数和变量将在栈帧中为它们保留内存。
分配内存:在运行时,执行"new"时,会在堆上为新的Object分配内存
当你做类似
的事情时
Object object = new Object()
在Java中,对象是对托管堆上实际实例的引用。与C++相比,大致就是这样
Object* object=new Object()
所以当你
Object object;
在Java中,为'reference'实例创建了一个地方。
类似于
Object* object;
在 C++ 中。
了解 Java 中的 Object object
只是对 object
的 Object
的 引用 很重要。如果您熟悉 C++,您可以将此引用视为指针(尽管它并不完全相同)。
在 64 位机器上,object
引用是 8 个字节。当您实际使用 new
关键字实例化一个 Object
并将其分配给引用时,这就是为您的 Object
分配内存的地方。
Object foo=null;
在 C++ 的含义中创建对 class 对象的对象的引用 foo。所以,它消耗内存仅供参考。
Object realFoo=new Object();
用这个对象的任何东西创建这样的引用和真实的对象。因此,它是引用和对象本身的内存。
在 Java 中没有内存保留 - 只有内存分配。
我知道在 C++ 中声明对象实例时是这样的:
Object object
调用对象构造函数并为该对象提供内存,但是我发现当您在 java 中执行此操作时,对象实例没有值,直到:
object = new Object()
写好了。我想具体知道什么时候为对象提供内存。我认为构造和 new 关键字都分配了内存,所以 Object object = new Object()
似乎是多余的。我在 oracle 的网站上看到声明 "reserves" 内存和新的 "allocates" 内存,我想知道两者之间有什么区别。
您需要区分 变量 所需的 space 和 对象 所需的 space ].请记住,变量的值只是一个引用——非常像 C++ 中的指针。所以如果你有:
Object x = null;
然后变量x
本身占用足够space作为引用(通常是4或8个字节)。现在如果你有:
x = new Object();
创建对象 - x
的值现在是对新创建对象的引用。 x
本身占用与以前相同数量的 space,但对象本身也需要 space(基本上是字段、对象类型的引用和数据用于同步和管理)。
声明保留内存:方法中的参数和变量将在栈帧中为它们保留内存。
分配内存:在运行时,执行"new"时,会在堆上为新的Object分配内存
当你做类似
的事情时Object object = new Object()
在Java中,对象是对托管堆上实际实例的引用。与C++相比,大致就是这样
Object* object=new Object()
所以当你
Object object;
在Java中,为'reference'实例创建了一个地方。 类似于
Object* object;
在 C++ 中。
了解 Java 中的 Object object
只是对 object
的 Object
的 引用 很重要。如果您熟悉 C++,您可以将此引用视为指针(尽管它并不完全相同)。
在 64 位机器上,object
引用是 8 个字节。当您实际使用 new
关键字实例化一个 Object
并将其分配给引用时,这就是为您的 Object
分配内存的地方。
Object foo=null;
在 C++ 的含义中创建对 class 对象的对象的引用 foo。所以,它消耗内存仅供参考。
Object realFoo=new Object();
用这个对象的任何东西创建这样的引用和真实的对象。因此,它是引用和对象本身的内存。
在 Java 中没有内存保留 - 只有内存分配。