Кто-нибудь знает, есть ли способ идентифицировать (в коде, а не LogCat), когда GC запущен? Возможно, намерение уволено? Я мог бы анализировать вывод LogCat, но это было бы идеально, если бы я мог определить, когда GC запущен из моего кода.Определите, когда запускается Android GC
ответ
Вы можете сделать это со слабым эталонным трюком:
WeakReference<GcWatcher> mGcWatcher
= new WeakReference<GcWatcher>(new GcWatcher());
long mLastGcTime;
class GcWatcher {
@Override
protected void finalize() throws Throwable {
handleGc();
mLastGcTime = SystemClock.uptimeMillis();
mGcWatcher = new WeakReference<GcWatcher>(new GcWatcher());
}
}
Теперь ... действительно ли это правильно для приложения, чтобы сделать это, это другое дело. :) Единственное место, где я знаю, где бы мы ни делали это в Android, - это код здесь, и его единственная цель - помочь нам быть умными, когда мы просим процессы явно использовать GC, например, когда они уходят в фоновый режим.
Сборщик мусора не будет работать, пока все ваши потоки не будут приостановлены. Поскольку телефоны имеют довольно низкую память, вероятно, можно предположить, что GC будет запущен после того, как вы получите onPause() или onStop().
Я не думаю, что у GC будет крючок, чтобы рассказать вам, что он делает. Вам, вероятно, придется выделить память, чтобы сказать, что коллекция произошла.
Мне любопытно, если бы ваша программа имела эту информацию, что бы она сделала с ней?
- 1. Определите, когда событие запускается
- 2. Android: Определите, когда приложение завершается.
- 3. Определите фактическое время блокировки GC compact
- 4. Фатальный сигнал 11 (SIGSEGV), когда GC запускается после вызова KeyChain.getPrivateKey
- 5. Что происходит, когда GC не запускается и программа заканчивает выполнение?
- 6. Определите, подходит ли приложение Android для Android
- 7. Android GC - LogCat всегда показывает GC активность
- 8. Определите, когда Android закончил обновление UI
- 9. Определите, когда эмулятор Android полностью загружен
- 10. Когда GC принимает действие
- 11. Когда выполняется GC?
- 12. Android GC Поведение
- 13. Понимание Android GC Сообщения
- 14. Определите, когда UITableViewCell освобожден
- 15. Определите, когда NSOpenPanel закроет
- 16. Определите, когда он поминутно
- 17. Определите, когда выполняется CallerRunsPolicy.
- 18. Определите, когда заканчивается MKRoutestep
- 19. Определите, когда видео завершило буферизацию
- 20. Обнаружить, когда в Android-студию запускается градация.
- 21. Android AlarmManager запускается, когда принудительно закрывает приложение
- 22. Android-сервис onStartCommand() запускается, когда приложение закрывается
- 23. поведения GC когда прижав объект
- 24. Когда был запущен Minor GC?
- 25. android memory monitor - "cause GC"
- 26. Android: Определите, какой процесс запуска вашего приложения?
- 27. Когда V8 GC запускает свой первый минорный цикл gc (очистка)?
- 28. Android OutOfMemory, когда GC сообщает о свободной памяти?
- 29. Определите активность в Android?
- 30. Определите скорость процессора Android?
Спасибо, что выглядит так, как я хочу, я думаю, что мне что-то не хватает, хотя какой класс (интерфейс) выполняет GcWatcher (реализует)? –
Ах, нет, я думаю, я понимаю. Увы, я попадаю в категорию людей, которые не понимают WeakReferences :) Думаю, я понимаю, как это работает. –