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