Десериализация больших строк с нулевым мусором в Java, проблема с огромным объектом

Я ищу способ десериализации ---- +: = 0 =: + ---- из ---- +: = 1 =: + ---- в Java с как можно меньшим количеством мусора.Поскольку я создаю свой собственный сериализатор и десериализатор, у меня есть полная свобода реализовать любое решение как на стороне сервера (т.е. при сериализации данных), так и на стороне клиента (т.е. при десериализации данных).Мне удалось эффективно сериализовать ---- +: = 2 =: + ---- без каких-либо накладных расходов на мусор, перебирая ---- +: = 3 =: + ---- символы ( -- +: = 4 =: + ---- ) и преобразование каждого ---- +: = 5 =: + ---- (16-битное значение) в 2x 8-битное значение.Существует хорошая дискуссия относительно этого здесь .Альтернативой является использование Reflection для прямого доступа к ---- +: = 6 =: + ----, лежащему в основе ---- +: = 7 =: + ---- , но это выходит за рамки проблемы.Однако мне кажется невозможным десериализовать ---- +: = 8 =: + ---- без создания ---- +: = 9 =: + ---- дважды , что кажется, ну,странно.Процедура:Создать ---- +: = 10 =: + ----Пройдите через ---- +: = 11 =: + ---- и введите ---- +: = 12 =: + ----Создайте строку с конструктором ---- +: = 13 =: + ----Из-за правил неизменности Java ---- +: = 14 =: + ---- конструктор копирует char [], создавая 2x накладные расходы сборщика мусора.Я всегда могу использовать механизмы, чтобы обойти это (Небезопасное ---- +: = 15 =: + ---- распределение + Отражение, чтобы установить экземпляр ---- +: = 16 =: + ---- ), ноЯ просто хотел спросить, есть ли какие-либо последствия, кроме того, что я нарушаю все соглашения о неизменности ---- +: = 17 =: + ---- .Конечно, самым разумным ответом на это было бы «давай, перестань это делать и доверяй GC, исходный ---- +: = 18 =: + ---- будет очень недолговечным, а G1 получитизбавиться от него на мгновение », что на самом деле имеет смысл, если ---- +: = 19 =: + ---- меньше 1/2 размера области G1 .Если он больше, char [] будет непосредственно выделен как огромный объект (т.е. автоматически распространяется за пределы области G1).Такие объекты чрезвычайно сложно эффективно обрабатывать сборщиком мусора в G1.Вот почему каждое распределение имеет значение.Есть идеи, как решить эту проблему?Большое спасибо.
7 голосов | спросил SergioTCG 21 Jpm1000000pmWed, 21 Jan 2015 12:57:22 +030015 2015, 12:57:22

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132