Дальвик В.М. Процессы выпускают системную оперативную память?

Документация для разработчиков Android, как часть Project Svelte (девиз: «Вы когда-нибудь пытались втиснуть Bugdroid в джинсы скинни?!?»), Есть страница наУправление памятью вашего приложения, Это содержит:

Когда пользователь переходит к другому приложению и ваш пользовательский интерфейс больше не отображается, вы должны освободить все ресурсы, которые используются только вашим пользовательским интерфейсом. Освобождение ресурсов пользовательского интерфейса в это время может значительно увеличить емкость системы для кэшированных процессов, что напрямую влияет на качество взаимодействия с пользователем.

а также:

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

и тому подобное.

Однако это имеет смысл только в том случае, если «освобождение данных ресурсов» действительно как-то повлияет на системную память.

У меня сложилось впечатление, что виртуальная машина Dalvik вела себя так же, как виртуальная машина Java (или, возможно, «делала», если они меняли ее, когда я не смотрел). AFAIK, Java VM выделяет системную память для увеличения размера кучи, но никогда не освобождает ее - после выделения она остается частью пространства кучи до тех пор, пока выполняется процесс.

Если виртуальная машина Dalvik ведет себя так же, я не вижу, как увеличение объема нераспределенного пространства кучи в нашем процессе повлияет на общую производительность системы. Теперь, освобождение пространства кучи для нашего процесса - это хорошая вещь, и, возможно, это уменьшит вероятность того, что мы нуждаемсяБольше ОЗУ системы в будущем ... но это не то, что подразумевается в документации. В документации говорится: «Освобождение ресурсов пользовательского интерфейса в это время может значительно увеличить емкость системы для кэшированных процессов»; в нем не говорится: «Освобождение ресурсов пользовательского интерфейса в это время не оказывает немедленного воздействия, но поможет уменьшить объем оперативной памяти вашего приложения в будущем».

Теперь, если бы инструкции сказали нам освободить память, выделенную через NDK, это имело бы смысл, поскольку это происходит вне кучи Dalvik и влияло бы на системную RAM. Но документация не проводит этого различия.

Выпускает ли виртуальная машина Dalvik выделенную оперативную память обратно в систему, кроме как путем завершения процесса? Если да, то когда? И, в меньшей степени, как это сделать, учитывая, что сборщик мусора не компактирует и не копирует?

Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос