Почему размер объекта Java отличается больше, чем на два байта, когда я заменяю int на короткий?

Я занимаюсь разработкой Red Black Tree и использую Eclipse Memory Analyzer Tool для измерения пространства, занимаемого его узлами.

Я заметил, что когда я заменяю переменную int, которую я использую, чтобы сохранить высоту дерева, на короткую переменную, размер кучи каждого узла уменьшается с 40 до 32.

public class RedBlackBST {
  private static final boolean RED   = true;
  private static final boolean BLACK = false;

  private Node root;

public class Node {
  public int key;
  public Node left, right;
  private boolean color;
  private int N;
}

Вы можете увидеть этот эффект на следующих рисунках:

С int для N (используется для высоты) мелкая и оставшаяся куча для случайного узла дерева равна 40.

int1int2

При кратком значении N краткая и оставшаяся куча для случайного узла дерева равна 32.

short1short2

Я думал, что разница должна быть всего два байта. Почему это 8?

Я также был бы очень признателен за объяснение двух цифр, касающихся остальных переменных. Я озадачен тем, что оба размера кучи являются делителями 2, так как я ожидаю, что цвет логической переменной будет иметь размер 1. Имейте в виду, что первая ссылка на вкладке атрибутов относится к экземпляру RedBlackBST.

1 ответ

Решение

Разница вызвана тем, что используемая вами JVM выравнивает размеры объектов по 8. Таким образом, вы, вероятно, используете горячую точку Oracle на 64-битной архитектуре. Это сделано так из-за соображений производительности.

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