Почему размер объекта 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.
При кратком значении N краткая и оставшаяся куча для случайного узла дерева равна 32.
Я думал, что разница должна быть всего два байта. Почему это 8?
Я также был бы очень признателен за объяснение двух цифр, касающихся остальных переменных. Я озадачен тем, что оба размера кучи являются делителями 2, так как я ожидаю, что цвет логической переменной будет иметь размер 1. Имейте в виду, что первая ссылка на вкладке атрибутов относится к экземпляру RedBlackBST.
1 ответ
Разница вызвана тем, что используемая вами JVM выравнивает размеры объектов по 8. Таким образом, вы, вероятно, используете горячую точку Oracle на 64-битной архитектуре. Это сделано так из-за соображений производительности.