Когда запускается сборщик мусора, это в значительной степени загадка, если вы не знаете из первых рук о том, как была реализована конкретная виртуальная машина, на которой запущено ваше приложение, и как именно она была настроена и настроена для конкретного телефона, который вы используете.
Вызов java.lang.System.gc () не является гарантией того, что сборщик мусора запущен. Обычно это просто увеличивает вероятность того, что виртуальная машина начнет сборку мусора очень скоро.
Я обнаружил, что вызов System.gc () 3 раза подряд в одном и том же потоке, но из 3 различных методов, работает достаточно хорошо.
Существует много способов обойти недостатки в стандартных реализациях API JavaME, чтобы уменьшить количество создаваемого мусора:
Расширьте ByteArrayOutputStream, чтобы не создавать копию байтового массива при доступе к данным.
избегайте вызова StringBuffer.getChars () и StringBuffer.toString (). заставить ваш код работать со смещениями и длинами StringBuffer.
превратить локальные буферы (byte [], StringBuffer ...) в экземпляры или статические переменные (и защитить их синхронизированными). Очевидно, что это требует дополнительных затрат, но это может помешать зависанию вашего приложения из-за слишком частой сборки мусора.
Расширение StringBuffer, чтобы избежать переключения между String и StringBuffer: реализовать append (String, offset, length), parseInt (int), indexOf (String, index), replace (offset, StringBuffer, offset, length ) ...
...