"Décharger" une classe java avec un ClassLoader Custo
Bonjour à tous,
Je désire "décharger" (avec le ramasse-miettes) une classe java charger par un classloader.
J'ai créé un classloader custo.
Le chargement de la classe :
Code:
1 2 3
| ClassLoader classLoader = new MyClassLoader();
Class<?> classACharger = Class.forName(nom, true, classLoader);//nom = String nommant la classe à charger
classACharger.newInstance(); |
Le déchargement qui ne fonctionne pas (fonction retirerUneClasse):
Code:
1 2 3 4 5 6
| classesCharges.remove(nom);//HashSet<String> contenant l'ensemble des nom de classes chargées
ChargeurI nouveauChargeurDeClass = new ChargeurImpl();
for (String nomClass : classesCharges) {
nouveauChargeurDeClass.chargerUneClasse(nomClass);
}
return nouveauChargeurDeClass; |
Le test :
Code:
1 2 3 4 5 6 7 8 9 10
| ClassLoadingMXBean classLoading = ManagementFactory.getClassLoadingMXBean();
ChargeurI cc = new ChargeurImpl();
cc.chargerUneClasse("package1.class1");
cc.chargerUneClasse("package1.class2");
ChargeurDeClassesI cc1 = cc.retirerUneClasse("package1.class1");
classLoading.setVerbose(true);
cc=null; System.gc();
System.out.println("Nb classes déchargées : " + classLoading.getUnloadedClassCount()); |
Le test affiche donc : "Nb classes déchargées : 0"