Это все еще тот случай, когда Android никогда не выгружает классы?

У нас есть большое приложение, котороеs всегда сталкиваются с пределом количества методов страха. Я'Меня попросили придумать способ, позволяющий ему делать гораздо больше, включая поддержку плагинов. Ища способы выгрузки кода я наткнулсяСоветы JNI который говорит

Классы выгружаются только в том случае, если все классы, связанные с ClassLoader, могут быть собраны сборщиком мусора, что встречается редко, но не является невозможным в Android.

Казалось, это подразумевает, что плагин может быть выгружен, если вы, скажем,

использовать новыйDexClassLoader для каждого файла .jar,только когда-либо ссылаться на плагин через ссылку на интерфейс, иобнулите любые копии этой ссылки интерфейса, когда закончите.

Итак, я создал тестовый пример:

Я создал пару тривиальных плагинов, используя уникальный загрузчик для каждого.Я создалReferenceQueue и создал слабые ссылки на мои два загрузчика, используя эту очередь; Я создал / запустил поток, который зацикливается бесконечно, делая очередь.remove() и отчетность.Я так же создалReferenceQueue и создал слабые ссылки на каждый плагинgetClass() используя очередь; Я создал / запустил другой поток, отслеживающий очередь ссылок на классы.Я создаю тысячу 1000x1000xARGB_8888 растровых изображений, чтобы тщательно форсировать gc.

Кажется, мои потоки мониторинга работают - я виделloader2 получить gc-ed, когда я использовалloader1 загрузить оба плагина по ошибке ;-) - но в остальном мои темы молчат, даже на 4.3. Может быть, я упускаю что-то очевидное в этом тестовом примере, или это все еще тот случай, когда

Далвик В.М.т в настоящее время выгрузить классы

как сотрудник GoogleФадден говорит вAndroid: когда классы выгружаются системой?

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

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