Ответ 1
Да, он выделяет некоторую память, но сумма варьируется в зависимости от реализации JVM. Вам нужно как-то представить:
- Уникальный указатель (так что массив равен!= каждый другой новый int [0]), поэтому не менее 1 байт
- Указатель класса (для Object.getClass())
- Хэш-код (для System.identityHashCode)
- Монитор объектов (для синхронизации (Object))
- Длина массива
JVM может выполнять различные оптимизации (выводить системный хеш-код из указателя объекта, если он не был GC'ed/перемещен, использовать один бит для представления объекта, который никогда не был заблокирован, использовать один бит для представления пустой массив и т.д.), но он все равно должен выделить некоторую память.
Изменить: например, следуя инструкциям этого сообщения, моя JVM сообщает о размере 16 для new int[0]
против 32 для new int[4]
.