Boxing
От: snaphold  
Дата: 24.05.17 04:37
Оценка:
Читаю книжку и непонятен такой вот кусок
Речь идёт про вставку в 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



Re: Boxing
От: Sinix  
Дата: 24.05.17 05:02
Оценка: 5 (2) +1
Здравствуйте, snaphold, Вы писали:

S>Читаю книжку и непонятен такой вот кусок

S>Речь идёт про вставку в arraylist byte.
S>Думал будет на каждый байт оверхед в 4 байта — указатель на объект в который забоксится byte

Сам объект (для x86) всегда включает в себя заголовок (8 байт) + собственно содержимое, выровненное по границе слова (обычно обзывается payload).
Ну и плюс указатель на объект в самом списке. Так 16 (8+4+4) байт и набегает.
Отредактировано 24.05.2017 11:44 Sinix . Предыдущая версия .
Re: Boxing
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.05.17 10:06
Оценка:
Здравствуйте, snaphold, Вы писали:

https://habrahabr.ru/post/136609/
и солнце б утром не вставало, когда бы не было меня
Re[2]: Boxing
От: snaphold  
Дата: 24.05.17 11:22
Оценка:
Здравствуйте, 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.

Re[3]: Boxing
От: Sinix  
Дата: 24.05.17 11:27
Оценка:
Здравствуйте, 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.


Нет боксинга — нет оверхеда
Re: Boxing
От: Kolesiki  
Дата: 24.05.17 12:34
Оценка:
Здравствуйте, snaphold, Вы писали:

S>Думал будет на каждый байт оверхед в 4 байта — указатель на объект в который забоксится byte

S>Почему 16 байт оверхеда будет на каждый байт?
S>По ходу с англ не очень у меня

Не с английским, а с логикой Сам же пишешь: "указатель НА ОБЪЕКТ". Сам-то объект тоже где-то создаётся! 8 байт объект (видимо, только служебная инфа), 4 байта, чтобы на него показать пальцем и ещё 4 байта "байтохранилища", выровненного по адресам.
Боксинг — он только в языке скромно выглядит!
Re[4]: Boxing
От: snaphold  
Дата: 25.05.17 05:21
Оценка: +1
Здравствуйте, 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 байт умещается?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.