Bonjour
Je cherche un moyen qui permet de récupérer tous les object instanciés d'une classe.
Est ce que ça existe? j'ai pensé à ce que ça soit une méthode dans la classe Class, mais je n'ai rien trouvé.
Merci d'avance.
Bonjour
Je cherche un moyen qui permet de récupérer tous les object instanciés d'une classe.
Est ce que ça existe? j'ai pensé à ce que ça soit une méthode dans la classe Class, mais je n'ai rien trouvé.
Merci d'avance.
Salut,
Pas directement en runtime, non. Il y a des moyens (par exemple en mode debug, ou profilage). Mais la question est pourquoi tu as ce besoin ?
Si tu as besoin de ça dans le fonctionnement normal de ton programme, tu peux toujours t'arranger pour stocker les références des instances de ta classe dans un conteneur.
Le type du conteneur dépend des spécificités de la classe, et de certaines conditions d'utilisation.
Une WeakHashMap conservera que les instances qui n'ont pas été garbagées, ce qui permet de n'avoir un impact que sur la construction pour gérer le conteneur. Malheureusement, tu pourras y trouver des instances qui ne sont plus référencées, ou alors il faut imposer au code qui utilise ces instances en appelant une méthode release comme pour un pool.
Attention, avec la WeakHashMap avec les classes mutables : il faudra utiliser comme clef un indentifiant unique (valeur et référence) non mutable (avec un AtomicInteger pour fabrique par exemple et new Integer(IDFACTORY.getAndIncrement())) à utiliser comme clef.
On peut utiliser un simple Set si on a une méthode release (aussi faut-il qu'elle soit systématiquement appelée lorsque c'est nécessaire) et qu'aucune instance ne peut être égale à une autre (aux termes de hashCode() et equals()), sinon une List.
En tout cas, c'est bien complexe et difficile de rendre sûr, et je ne vois pas de raison fonctionnellle d'avoir à le faire (les seules fois où j'en ai eu besoin, c'est en debug ou en profiling).
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Pas grand chose d'autre à ajouter par rapport à ce joel.drigo.
Si tu es seulement intéressé par l’empreinte mémoire, tu peux utiliser JVisualVM (fournit avec le jdk). Il te permet d'avoir le nombre d'instance d'une classe ou d'un type primitif et le pourcentage que cela représente par rapport au total.
Cela est assez pratique pour avoir une idée d'où se trouve la plus grosse consommation mémoire rapidement.
Cordialement,
Patrick Kolodziejczyk.
Si une réponse vous a été utile pensez à
Si vous avez eu la réponse à votre question, marquez votre discussion
Pensez aux FAQs et aux tutoriels et cours.
ou Java Mission Control...
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager