В целях обучения я в настоящее время экспериментирую со сборкой мусора (Pixel 2, Android 10 -> ART
). Мое наблюдение за следующим экспериментом состоит в том, что CountActivity
никогда не удаляется при первом явном запуске сбора мусора, а только при втором явном запуске сбора мусора. Я хочу понять, почему он не удаляется при первом запуске. Я предполагаю, что это связано с какой-то сборкой мусора из поколения в поколение, но я хочу это проверить. Как я могу "посмотреть", что делает сборка мусора? Например, можно ли увидеть внутренние поколения, в которых сборщик мусора группирует кучу?
Мой тестовый пример выглядит следующим образом:
MainActivity
, который показывает кнопку «Показать» CountActivity " CountActivity
, которое отображается при нажатии кнопки" Show CountActivity "в MainActivity
. - Я завершаю
CountActivity
, используя системный ключ возврата
После этого я принудительно запускаю сборщик мусора, собираю кучу. CountActivity
все еще там. После принудительного запуска второго явного сбора мусора и повторного захвата кучи CountActivity
исчезает. Теперь я все еще хочу понять, почему требуется два запуска сборки мусора.
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.AppTheme)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
buttonStart.setOnClickListener {
showCountActivity()
}
}
private fun showCountActivity() {
val intent = Intent(this, CountActivity::class.java)
startActivity(intent)
}
}
CountActivity
class CountActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_count)
}
}