У меня есть приложение, где профиль памяти выглядит примерно так:
(источник: kupio.com)
Медленный рост использования памяти вызван распределением множества маленьких, простых, переходных объектов. В ситуациях с нехваткой памяти (это мобильное приложение) накладные расходы ГХ заметны по сравнению с менее строгими объемами памяти.
Так как мы знаем, из-за природы приложения, что эти всплески будут только продолжаться, я рассматривал некоторый пул множества переходных объектов (удивительное имя). Эти объекты будут жить в течение всего жизненного цикла приложения и будут использоваться везде, где это возможно (там, где время жизни объекта короткое и очень предсказуемое).
Надеемся, что это уменьшит влияние GC за счет уменьшения количества собираемых объектов и повышения производительности.
Очевидно, что это также будет иметь свои собственные пределы производительности, поскольку "выделение" будет более дорогостоящим, и поддержание самого кэша приведет к дополнительным издержкам.
Поскольку это было бы довольно большое и навязчивое изменение большого количества кода, мне было интересно, пробовал ли кто-нибудь что-то подобное и было ли это выгодно, или были ли какие-либо другие известные способы смягчения против GC в такой ситуации, Идеи для эффективных способов управления кешем многократно используемых объектов также приветствуются.