[英]How is the memory allocated(stack and heap reference) when an OBJECT array is created?
[英]In Java, How much memory is allocated on stack and heap for “new Object()”
这是我的面试问题之一,但我仍然试图解决这个问题。 如果我创建“new Object()”,则对该对象的引用将在堆栈上,这将是64位上的8个字节。 然后,问题是什么在堆上。 采访者后来提到,堆上总会分配两件事,分别是“Class”对象和“Monitor”。 有人可以解释一下在创建“new Object()”时会分配多少内存/分配的内容?
如果我创建“new Object()”,则对该对象的引用将在堆栈上,这将是64位上的8个字节。
即使对于64位JVM,最有可能是4字节。 Oracle / OpenJDK支持使用4个字节进行引用的CompressesOops。
然后,问题是什么在堆上。
对象的标题。 它没有字段。
采访者后来提到,总会在堆上分配两个东西,即“类”对象
Class
对象是存储在堆外的信息的代理。 即使存在类的实例,它也不一定存在(尽管对于Object它可能已经存在)
以及“监视器”。
同样,只有在使用时才会创建监视器,即synchornized
有人可以解释一下在创建“new Object()”时会分配多少内存/分配的内容?
在64位JVM上,标头默认为12个字节,但是对象对齐时,它将使用16个字节。 在32位JVM上,它只有8个字节。
在具有CompressedOops的32位JVM和64位JVM上,引用只有4个字节(这是大多数JVM)
您的new Object()
没有引用。 它只是一个将在堆空间上分配的对象。
如果是这样的话:
Object someReference = new Object();
然后someReference
将在线程的堆栈空间。 但是对象本身将始终在堆上。
让我们举一个例子:
如果您要执行此语句:
Employee emp = new Employee();
你有像以下的记忆:
new Employee()
即实际对象 emp
即引用的信息 Employee
类的信息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.