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 :
Le déchargement qui ne fonctionne pas (fonction retirerUneClasse):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ClassLoader classLoader = new MyClassLoader(); Class<?> classACharger = Class.forName(nom, true, classLoader);//nom = String nommant la classe à charger classACharger.newInstance();
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Le test affiche donc : "Nb classes déchargées : 0"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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());
Partager