У меня есть приложение OpenGL Android, которое использует значительный объем памяти для настройки сложной сцены, и это явно вызывает значительную фрагментацию кучи.Несмотря на отсутствие утечек памяти, невозможно уничтожить и создать приложение, не заполнив его из-за фрагментации.(Фрагментация - определенно проблема, а не утечка)
Это вызывает серьезную проблему, поскольку Android имеет привычку разрушать и создавать действия на одной виртуальной машине / куче, что, очевидно, приводит к сбою активности.В качестве стратегии противодействия этому я использовал следующую технику:
@Override
protected void onStop() {
super.onStop();
if(isFinishing()) {
System.runFinalizersOnExit(true);
System.exit(0);
}
}
Это гарантирует, что когда операция завершается, она вызывает полное отключение виртуальной машины и, следовательно, при следующем запуске операции она получает новую нефрагментированную кучу.
Примечание. Я понимаю, что это не «путь Android», но, учитывая, что сборщик мусора не компактен, невозможно непрерывно повторно использовать кучу.
Эта техническая система на самом деле работает в целом, однако она не работает, когда действие уничтожается в режиме без завершения, а затем создается заново.
Кто-нибудь получил какие-либо хорошие предложения о том, как справиться с этим?деградация кучи?
Примечание: сокращение потребления памяти тоже не вариант.На самом деле это занятие не использует столько памяти, но куча (и собственная куча), кажется, легко фрагментируется, вероятно, из-за больших кусков памяти