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 : 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();
Le déchargement qui ne fonctionne pas (fonction retirerUneClasse):

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 :
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());
Le test affiche donc : "Nb classes déchargées : 0"