Расположение объектов Java и статические поля

Инструмент JOL дает возможность рассчитывать структуру памяти объекта.

Я заметил, что статические поля не участвуют в расчете, например:

public class Foo {

    private static final int i = 1;

    private char value;

    public Foo(char value) {
        this.value = value;
    }
}

затем,

System.out.println(ClassLayout.parseClass(Foo.class).toPrintable());

дает следующий вывод:

com.kishlaly.Foo object internals:
 OFFSET  SIZE  TYPE DESCRIPTION                    VALUE
      0    12       (object header)                N/A
     12     2  char Foo.value                      N/A
     14     2       (loss due to the next object alignment)
Instance size: 16 bytes (estimated, the sample instance is not available)
Space losses: 0 bytes internal + 2 bytes external = 2 bytes total

Где находится приватный статический финал int в памяти?

1 ответ

Инструмент дает расположение памяти объекта в куче. Статический контент находится в разделе памяти PermGen и находится в реализации JVM, независимо от того, включен он в кучу или нет.

Ваш инструмент предоставил макет памяти объекта, в то время как статическая переменная является переменной уровня класса, она всегда будет в разделе постоянной генерации памяти и не будет включена в этот макет.

Другие вопросы по тегам