Что вы подразумеваете под "не-распределением времени выполнения"? Я действительно даже не уверен, что вы подразумеваете под "распределением" в этом контексте ... выделение памяти? Это делается во время выполнения, очевидно. Вы явно не имеете в виду какой-либо фиксированный пул объектов, которые известны во время компиляции, так как ваш код позволяет добавлять объекты в ваш список несколькими различными способами (не то, чтобы вы могли выделить для них что-либо во время компиляции даже если бы вы были).
Кроме того, ничто в опубликованном вами коде не будет вызывать сборку мусора сама по себе. Объекты можно собирать мусором только в том случае, если ничто в программе не имеет четкой ссылки на них, а ваш опубликованный код позволяет добавлять объекты только в ArrayList
(хотя их можно удалить, вызвав getObjects()
и, конечно, удалив из него) , Пока вы не удаляете объекты из списка objects
, вы не переназначаете objects
, чтобы указывать на другой список, и сам объект, содержащий его, не становится пригодным для сборки мусора, ни один из объектов он также будет доступен для сборки мусора.
Так что, в принципе, нет никакой конкретной проблемы с кодом, который вы разместили, и ваш вопрос не имеет смысла, как задано. Возможно, есть больше деталей, которые вы можете предоставить, или есть лучшее объяснение того, что именно является вашей проблемой и что вы хотите. Если да, попробуйте добавить это к своему вопросу.
Изменить:
Из описания FixedSizeArray
и кода, который я рассмотрел в нем, он в значительной степени эквивалентен ArrayList
, который инициализируется с определенной емкостью массива (используя конструктор, который принимает int initialCapcacity
), за исключением того, что он потерпит неудачу во время выполнения, если что-то попытается добавить к нему, когда его массив заполнен, где ArrayList
расширится, чтобы держать больше и продолжать работать просто отлично. Если честно, это кажется бессмысленным занятием, возможно написанным, потому что автор на самом деле не понимал ArrayList
.
Обратите также внимание, что его утверждение о "не требующем выделения во время выполнения" немного вводит в заблуждение ... ему, конечно, приходится выделять массив при его создании, но он просто отказывается выделять новый массив, если его первоначальный массив заполняет. Вы можете достичь того же, используя ArrayList
, просто задав ему initialCapacity
, который по крайней мере достаточно велик, чтобы вместить максимальное количество объектов, которые вы когда-либо добавите к нему. Если вы сделаете это и фактически убедитесь, что никогда не добавляете в него больше этого количества объектов, он никогда не выделит новый массив после его создания.
Тем не менее, все это никак не связано с вашей заявленной проблемой сбора мусора, и ваш код по-прежнему не показывает ничего, что могло бы привести к тому, что огромное количество объектов будет собираться мусором. Если есть какая-либо проблема, она может относиться к коду, который фактически вызывает методы add
и getObjects
, и к тому, что он делает.