В: Почему для класса TestClass1 выделяется меньше памяти?
Как уже упоминалось в krock,
Integer i = 9;
станет
Integer i = Integer.valueOf(9);
Эта инструкция вызываеткэш должен быть инициализирован, прежде чем вы сможете его использовать.
Кэш содержит значения от -128 до обычно 127, что дает 255 значений, которые должны быть инициализированы (new Integer(i)
).И это вызывает такое большое использование памяти.
Возобновляемая инструкция
i = new Interger(9);
- создаст один объект Integer, i = 9;
- создаст не менее 255 объектов Integer и один массив,
Примечание: инициализация кэша не зависит от значения в штучной упаковке.Кэш также инициализируется, когда вы помещаете в бокс значения ниже -128 и больше, чем обычно 127.