一个类在JVM中占用多少空间?

时间:2019-04-01 15:38:12

标签: java memory classloader

由于所有搜索结果都想告诉我如何计算对象(而不是类)的大小,所以我一直无济于事。

当我们定义一个类(在jar / war中带有.class文件)并将其加载到JVM中时,它将占用多少空间?显然,这取决于类中的实际情况,具有更多字段的类需要存储更多的元数据。但是,例如,如果说该类具有10个整数字段和10个其他对象的引用字段:

  • 要说1000个此类(所有扩展相同的基类),在JVM中会占用多少额外空间?
  • 如果它们是匿名类而不是已定义的类,是否会发生变化?

2 个答案:

答案 0 :(得分:1)

每个Class本身都是一个对象。因此,指示性的大小是在类本身上调用Instrumentation.getObjectSize()

您可以在此处遵循该教程: https://www.baeldung.com/java-size-of-object

然后,如果要检查MyClass的大小,可以执行以下操作: InstrumentationAgent.getObjectSize(MyClass.getClass());

这并不意味着它是与此类相关的唯一内存,因为JVM的类加载器,垃圾回收器和其他内部工作机制可能会保留有关该类的其他元信息。

答案 1 :(得分:0)

答案肯定会取决于JVM实现(包括此类实现的版本,平台等)。您找不到任何号码。

对于匿名内部类,这些内部类仍然具有为其生成的类名,因此应该具有零影响。