没有数据成员的类在java中是否有内存占用?

时间:2010-06-12 05:46:20

标签: java performance memory-management garbage-collection

我的问题与java中没有数据成员的类的内存占用有关。假设在java中我有一个没有数据成员的类,它只包含方法。因此,如果我正在创建特定类的实例,那么除了对象引用内存之外,它是否会占用主内存中的内存吗?

4 个答案:

答案 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