Я предполагаю, что вы получаете OutOfMemoryError, возможно, потому что ваш -mx или -Xmx слишком низко его установил.
Не очень ясно, какова ваша структура данных или почему вы считаете, что она не должна быть 30 МБОднако 30 МБ в наши дни - довольно тривиальный объем памяти компьютера.Сервер с 8 ГБ стоит около 850 фунтов стерлингов.Вы программируете для мобильного устройства?
Лучший способ узнать, сколько использует структура и зачем использовать профилировщик памяти.VisualVM - это профилировщик, который поставляется с Java.YourKit - это коммерческий профилировщик, который я нахожу лучше.
Вполне вероятно, что вы используете не самую эффективную структуру памяти, но опять же вполне вероятно, что это не должно иметь большого значения.
Возможно, если бы вы могли уточнить, что вы делаете, когда могли бы предложить лучшее решение.
В JVM Sun / Oracle вы можете указывать на определенное место в памяти и выделять / освобождать память, как в C, но это весьма вряд ли будет хорошей идеей.;)