Ainda é verdade que o Android nunca descarrega classes?

Temos um aplicativo grande que está sempre em execução no limite de contagem do método de dread. Fui solicitado a criar uma maneira de permitir que ele fizesse muito mais, incluindo plug-ins de suporte. Procurando maneiras de descarregar código, eu encontreiDicas JNI que diz

As classes só são descarregadas se todas as classes associadas a um ClassLoader puderem ser coletadas como lixo, o que é raro, mas não será impossível no Android.

Isso parece implicar que um plugin pode ser descarregado se, digamos,

use um novoDexClassLoader para cada arquivo .jarsó se referem ao plugin através de uma referência de interface, eanular todas as cópias dessa referência de interface quando terminar.

Então, criei um caso de teste:

Eu criei um par de plugins triviais, usando um carregador único para cada um.Eu criei umReferenceQueue<ClassLoader> e criei referências fracas para meus dois carregadores, usando essa fila; Eu criei / iniciei um thread que faz um loop indefinidamente, fazendo uma fila.remove() e relatórios.Eu também criei umReferenceQueue<Class<?>> e criamos referências fracas para cada plugingetClass() usando a fila; Eu criei / iniciei outro thread monitorando a fila de referência da classe.Eu crio mil bitmaps de 1000x1000xARGB_8888 para forçar completamente o gc.

Meus threads de monitoramento parecem funcionar - eu viloader2 obter gc-ed quando eu useiloader1 para carregar os dois plugins por engano ;-) - mas senão meus threads ficam em silêncio, mesmo em 4.3. Eu estou talvez sentindo falta de algo óbvio neste caso de teste, ou ainda é o caso que o

A Dalvik VM atualmente não descarrega classes

como funcionário do Googlefadden diz emAndroid: Quando as classes são descarregadas pelo sistema?

questionAnswers(1)

yourAnswerToTheQuestion