У меня есть приложение, которое создает серию растровых изображений. Я держу эти растровые изображения в SoftReferences, чтобы избежать нехватки памяти. Я хотел бы, чтобы размер кучи увеличился до максимальных 16 МБ, прежде чем он начнет собирать мои SoftReferences. Тем не менее, SoftReferences собираются очень охотно, прежде чем увеличить кучу до максимума. Есть ли способ заставить ссылки собираться менее жадно? или вручную увеличить кучу до максимума? Возможно, способ просто запустить приложение с выделенным 16 МБ?
Размер кучи Android и SoftReferences
Ответы (2)
В настоящее время невозможно изменить поведение коллекции SoftReference.
Я не уверен, что вы подразумеваете под «ручным увеличением кучи до максимума».
Если это экземпляры класса Bitmap (в отличие от какой-либо пользовательской реализации растрового изображения), данные пикселей фактически хранятся в собственной куче, но используется раздражающий прием учета «внешнего распределения», который еще больше усложняет ситуацию. (Примечательно, что хранилище освобождается финализатором, а не сборщиком мусора, и финализаторы должны выполняться в отдельном потоке после завершения сборки мусора. Можно выделять растровые изображения до тех пор, пока не закончится память, и у сборщика мусора нет возможности освободить сборщик мусора. памяти перед тем, как выдать ошибку OOM.)
Это известная проблема в Andriod. Когда VM собирает программные ссылки, она либо собирает все, либо ничего, хотя она должна собирать «некоторые» и не должна ничего собирать, когда имеется много свободной кучи.
Проверьте: http://code-gotcha.blogspot.com/2011/09/softreference.html