Читаю книжку и непонятен такой вот кусок
Речь идёт про вставку в arraylist byte.
Думал будет на каждый байт оверхед в 4 байта — указатель на объект в который забоксится byte
Почему 16 байт оверхеда будет на каждый байт?
По ходу с англ не очень у меня
The difference in efficiency here is incredible. Let’s look at the ArrayList first, con-
sidering a 32-bit CLR.7 Each of the boxed bytes will take up 8 bytes of object overhead
plus 4 bytes (1 byte, rounded up to a word boundary) for the data itself. On top of that,
you have all the references themselves, each of which takes up 4 bytes. So for each byte
of useful data, you’re paying at least 16 bytes—and then there’s the extra unused space
for references in the buffer
�
�
Здравствуйте, snaphold, Вы писали:
https://habrahabr.ru/post/136609/
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, snaphold, Вы писали:
S>>Читаю книжку и непонятен такой вот кусок
S>>Речь идёт про вставку в arraylist byte.
S>>Думал будет на каждый байт оверхед в 4 байта — указатель на объект в который забоксится byte
S>Сам объект всегда включает в себя заголовок (8 байт) + собственно содержимое, выровненное по границе слова (обычно обзывается payload).
S>Ну и плюс указатель на объект в самом списке. Так 16 (8+4+4) байт и набегает.
А как выделенно коррелирует с текстом ниже? то есть непонятно выделенное ниже
Compare this with the List<byte>. Each byte in the list takes up a single byte
within the elements array. There’s still wasted space in the buffer, waiting to be used by
new items, but at least you’re only wasting a single byte per unused element there.
Здравствуйте, snaphold, Вы писали:
S>>Сам объект всегда включает в себя заголовок (8 байт) + собственно содержимое, выровненное по границе слова (обычно обзывается payload).
S>>Ну и плюс указатель на объект в самом списке. Так 16 (8+4+4) байт и набегает.
S>А как выделенно коррелирует с текстом ниже? то есть непонятно выделенное ниже
Выделил в ответ:
Compare this with the List<byte>. Each byte in the list takes up a single byte
within the elements array. There’s still wasted space in the buffer, waiting to be used by
new items, but at least you’re only wasting a single byte per unused element there.
Нет боксинга — нет оверхеда
Здравствуйте, snaphold, Вы писали:
S>Думал будет на каждый байт оверхед в 4 байта — указатель на объект в который забоксится byte
S>Почему 16 байт оверхеда будет на каждый байт?
S>По ходу с англ не очень у меня
Не с английским, а с логикой
Сам же пишешь: "указатель НА ОБЪЕКТ". Сам-то объект тоже где-то создаётся! 8 байт объект (видимо, только служебная инфа), 4 байта, чтобы на него показать пальцем и ещё 4 байта "байтохранилища", выровненного по адресам.
Боксинг — он только в языке скромно выглядит!
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, snaphold, Вы писали:
S>>>Сам объект всегда включает в себя заголовок (8 байт) + собственно содержимое, выровненное по границе слова (обычно обзывается payload).
S>>>Ну и плюс указатель на объект в самом списке. Так 16 (8+4+4) байт и набегает.
S>>А как выделенно коррелирует с текстом ниже? то есть непонятно выделенное ниже
S>Выделил в ответ:
S>S>Compare this with the List<byte>. Each byte in the list takes up a single byte
S>within the elements array. There’s still wasted space in the buffer, waiting to be used by
S>new items, but at least you’re only wasting a single byte per unused element there.
S>Нет боксинга — нет оверхеда
ааа, типа 4 байта на содержимое, выровненное по границе слова это только из-за боксинга? если просто структура, в нашем случае byte, то все просто в 1 байт умещается?