Какая связь пула автоматического выпуска с сборкой мусора? - PullRequest
1 голос
/ 29 марта 2012

Я прочитал это из Apple Docs ..

В среде с сборкой мусора релиз - это неоперация (инструкция бездействия). Поэтому NSAutoreleasePool предоставляет метод стока, который в среде с подсчетом ссылок ведет себя так же, как и вызывающий выпуск, но который в среде с сборкой мусора запускает сборку мусора (если память, выделенная с момента последней коллекции, превышает текущий порог). Поэтому, как правило, для утилизации пула автоматического выпуска следует использовать сток, а не выпуск.

, но не понимаю значение

1) "если память, выделенная с момента последней коллекции, превышает текущий порог."

и

2) ios не поддерживает сборщик мусора, тогда зачем использовать слив со сборщиком мусора?

1 Ответ

1 голос
/ 29 марта 2012

1) Это, вероятно, означает, что ГХ запоминает объем выделенной памяти, и в следующий раз, когда drain называется объемом выделенной памяти, сравнивается с последним объемом. Только если изменение является достаточно значительным, сбор мусора происходит.

Позвольте мне объяснить это по-другому: сбор мусора может быть дорогостоящим, поэтому вам нужно решить, когда его собирать. Чтобы избежать ненужной работы, ГХ может запоминать объем памяти после запуска сбора (например, используется 25 МБ). Теперь, когда в следующий раз GC рассматривает коллекционирование, он сначала решает, стоит ли выполнять всю работу. Например, если объем используемой памяти сейчас составляет 25,5 МБ, то, вероятно, ничего не стоит делать. Но если сейчас используется 50 МБ, сбор полезен.

2) Этот материал возник на Mac, где доступен GC. Чтобы разрешить совместное использование кода между iOS и Mac OS X, эти, казалось бы, ненужные методы все еще остаются в iOS, чтобы оставаться максимально совместимыми с Mac OS X. Я даже подозреваю, что это связано с тем, что iOS на самом деле является «форком» Mac OS X и, таким образом, унаследовал этот материал.

...