У меня есть настраиваемый объект, который я конвертирую в BinaryObject (используя BinaryObjectBuilder) перед тем, как поместить его в кеш зажигания.
Глубокий размер моего настраиваемого объекта составляет около 500 байт, размер BinaryObject - колоссальные ~ 8 МБ, а размер данных, которые фактически отправляются на сервер Ignite, составляет ~ 300 байт.
Поскольку BinaryObject - это то, как Ignite хранит данные внутри, каковы плюсы и минусы создания BinaryObject на клиенте и отправки ему на сервер, а не отправки pojo и разрешения серверу внутренне преобразовать его в BinaryObject? Недостатком создания BinaryObject на клиенте является то, что я использую ~ 8,5 МБ ОЗУ для хранения ОДНОГО BinaryObject в куче jvm клиента, которая будет намного меньше, чем куча jvm сервера.
Я использовал JOL для измерения размера объекта. Правильно, каждый из моих объектов размером около 500 байт превратился в объект размером ~ 8 МБ, поэтому 10 будет занимать 80 МБ.
JOL = openjdk.java.net/projects/code-tools/jol
Я ожидал, что 8 МБ будут какими-то общими данными. В противном случае в этом нет никакого смысла. Конечно, там есть какие-то метаданные или предварительно выделенная память (но даже в этом случае это слишком много). Я бы не доверял JOL здесь и измерял потребляемую кучу, когда создается много объектов. Другая возможность может заключаться в том, что совместному использованию препятствует способ создания объектов. Вам действительно стоит опубликовать код и вывод JOL. Попытайтесь упростить проблему, используя более простой объект, чтобы вы могли найти виновника. Ни один разумный инструмент не взорвет все объекты с коэффициентом 16000 - это сделает его полностью непригодным для использования.




Это дубликат Раздутие двоичного объекта Apache Ignite
Объекты не становятся размером 8 МБ, когда вы конвертируете их в BinaryObjects. Каждый BinaryObject хранит ссылки на некоторые общие данные, которые одинаковы для каждого объекта. И эти данные не передаются по сети.
Попробуйте проанализировать дамп кучи с помощью инструмента, который может построить дерево доминаторов. Вы увидите, что сохраненный размер вашего BinaryObject составляет около 300 байтов, а не 8 мегабайт.
Как вы измерили размер объекта? Что, если вы создадите 10 таких объектов, они займут 80 МБ?