我的问题与java中没有数据成员的类的内存占用有关。假设在java中我有一个没有数据成员的类,它只包含方法。因此,如果我正在创建特定类的实例,那么除了对象引用内存之外,它是否会占用主内存中的内存吗?
答案 0 :(得分:6)
最终,每个Java对象都知道它的类,并且可以选择附加一个同步原语(尽管this
可以是合成的)。这是两个引用,很难使java.lang.Object
实例没有。其他所有内容都来自该课程,因此您可以获得至少8 bytes in Java 1.3.1的费用。如果您确实需要,探查器会告诉您当前的费用。
答案 1 :(得分:4)
是的,确实如此,因为至少即使是“空”对象也有指向其类型信息的指针。
答案 2 :(得分:3)
我们要清楚。当然,对您的对象的引用会占用空间。但是你的对象也会为它的'this'指针占空间(即你可以区分不同的实例)以及任何超类的字段 - 例如对象 - 最后是堆内部数据结构的开销。
答案 3 :(得分:2)
由于各种干扰源(不断增长的堆,GC),基准测试内存很难,但仍值得一试:
public static void main(String[] args)
{
final int n = 1000000;
final Runtime runtime = Runtime.getRuntime();
final Object[] objects = new Object[n];
final long memory0 = runtime.totalMemory() - runtime.freeMemory();
for (int i = 0; i < objects.length; i++)
{
objects[i] = new Object();
}
final long memory1 = runtime.totalMemory() - runtime.freeMemory();
final long memory = memory1 - memory0;
System.out.printf(
"%s %s\n",
System.getProperty("java.vm.name"),
System.getProperty("java.vm.version"));
System.out.printf("%d %d %.1f\n", n, memory, 1.0 * memory / n);
}
Java HotSpot(TM)Server VM 14.3-b01 1000000 8000336 8.0