Каков объем памяти в куче DirectByteBuffer в Java? - PullRequest
2 голосов
/ 10 августа 2011

Подавляющее большинство DirectByteBuffer - если оно достаточно велико - выделяется из кучи Java.Но часть его все равно будет в куче, даже если она очень мала.

Сколько байтов занимает DirectByteBuffer любого размера в куче?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Это, очевидно, определяется реализацией, поскольку спецификация Java не дает никаких гарантий относительно этого материала. Для современной виртуальной машины: 2 слова на объект (а точнее, по крайней мере, 1 слово для переменных, даже если у объекта их нет). Теперь вам в основном приходится считать. Каждый объект должен быть выровнен по 8 байтов.

В качестве примера давайте посмотрим на DirectByteBuffer: мы видим, что он хранит один объект (1 слово). Теперь, если он разделяет этот объект с чем-то другим, вы можете или не можете считать его. Если вы посчитаете его, вам нужно будет выяснить, какой объект хранится, а также рассчитать его размер (поэтому зависит от вашего точного пути к коду). Поскольку DirectByteBuffer расширяет класс, вам необходимо добавить к нему и этот размер.

Да, это довольно сложная работа, и я уверен, что, черт возьми, она этого не сделает;) Но все довольно просто. Я считаю как минимум 3 ссылки и 29 байтовых примитивов.

0 голосов
/ 10 августа 2011

Очень маленькое число.Достаточно для его монитора, его ссылки на класс, его метки, положения, предела и емкости, а также ссылки на массив прямых данных.

Если массив данных достаточно мал, чтобы вы могли беспокоиться о накладных расходах, возможно,Вы не должны использовать один вообще.

...