Java是否为没有实例变量的对象分配内存?

时间:2017-06-05 14:00:14

标签: jvm

请帮助解决以下问题。 假设我的类只包含方法。堆中的空间是否会为此类创建的对象分配?如果是,那么它包含什么?

1 个答案:

答案 0 :(得分:1)

Fairoz的question linked包含最相关的数据,但我会尝试将信息缩小到您的案例。

是。 JVM将从堆中取出一个连续的空间来存储这些对象。

内容特定于JVM实现。在HotSpot中,您可以在source code

中查看具体内容
  • 将会有一个名为“Mark”的机器词,它被定义为here,用于保持hashCode,锁定状态和垃圾回收。这需要8个字节。
  • 接下来将是指向Klass的指针,其中包含有关该类的信息,例如方法。

如果你在64位JVM中,启用了compressOops(在java 8上是默认的),Klass指针将只占用4个字节。由于没有字段,因此总大小为12个字节。但是,JVM强制对齐一个完整的单词,因此您的对象将使用4个字节进行填充。总共16个字节。

一些有用的文档: - https://www.infoq.com/articles/Introduction-to-HotSpot - https://psy-lob-saw.blogspot.com.es/2013/05/know-thy-java-object-memory-layout.html