Est-il possible de voir toutes les références à un objet dans le temps d'exécution?
Est-il un moyen pour voir toutes les références à un objet dans le temps d'exécution?
Je suis à l'aide de Netbeans, est ce que cette fonction existe-t-il?
EDIT: Pas de problème dans l'utilisation de profileurs pour ce faire, j'ai seulement besoin de connaître les références, peu importe comment.
- Java ne permet pas de maintenir le nombre de références, et s'il le fait, ces références ne serait pas exposée normalement.
- Pas très clair ... voulez-vous dire un outil comme eclipse.org/mat ?
- Je pense que la question est de savoir comment utiliser un IDE, pas de Java référence de la folie. Netbeans terminologie est "Trouver des Usages" et est censé être similaire à Éclipse "Trouver toutes les références."
- Peut être dans l'IDE manière ou d'une autre. J'ai informé l'IDE, car ce peut être là et je ne sais pas.
- Il n'est pas clair ce que vous êtes après - références à un objet au moment de l'exécution, ou tout le code qui fait référence à une classe ou une méthode.
- Skeet: Désolé, c'était pas clair. Je veux les références dans le temps d'exécution. Tous les refereces d'un objet créé.
- La droite. C'est ce que je pensais.
Vous devez vous connecter pour publier un commentaire.
Ok, Netbeans afficher toutes les références à un objet.
D'abord lancer le projet en mode debug
CTRL + F5
, après, montrent les Classes Chargées,Alt + Shift + 4
ouWindow->Debug->Loaded Classes
.Choisir la classe voudra voir les références et double-cliquez dessus.
Suspendre l'exécution et il est.
Dans le top est les attributs de l'objet, et dans le fond, toutes les références à celui-ci.
Si vous videz le tas et de les analyser, vous obtenez trouver toutes les références. Les profileurs comme VisualVM et YourKit peut le faire pour vous.
Cependant il n'est pas possible de le déterminer de manière dynamique. Si vous voulez savoir toutes les choses qui se rapportent à un objet, vous devez maintenir une collection de ces soi-même.
Dans Netbeans, vous pouvez utiliser le Trouver des Usages fonction pour voir où une classe particulière peut avoir été référencés à l'intérieur d'un projet particulier.
De la de l'Explorateur de Projet, sélectionnez la classe et faites un clic droit > Trouver des Usages.
Le résultat ressemble un peu à l'image suivante:
Malheureusement, il n'y a pas une telle fonction est disponible dans Java. Mais, il y a un moyen d'être averti qu'il n'y a plus de référence à un objet lors de l'exécution.
La solution est de créer une référence faible de l'objet surveillé et l'associer à un référence de la file d'attente. Quand il n'y aura pas plus dur de référence à cet objet, le GC va tôt ou tard se rappeler et mettre en file d'attente la référence faible. Vous pouvez le vérifier avec isEnqueued().
Si vous fournir plus d'informations à propos de votre question, peut-être que nous pouvons donner plus de trucs & astuces.
MODIFIER
De contrôler toutes les références à un oject, vous pouvez utiliser le Modèle de Proxy. Au lieu de définir des références à votre objet de connexion, vous devez créer un objet proxy contenant une instance privée de l'objet de connexion. Ensuite, vous avez votre code, appelez le proxy qui va appeler la connexion de l'objet lui-même, au lieu d'avoir des références directes à la connexion.
Lorsque vous avez terminé avec l'objet de connexion, fermez-la à l'intérieur de l'objet proxy. Si d'autres parties du code de toujours essayer d'accès que les objets de connexion via le serveur proxy, vous serez en mesure de le détecter dans la procuration, lorsqu'il est appelé.
C'est une astuce que vous pouvez utiliser pour savoir quelle partie du code est toujours "référencement" de votre objet, pour ainsi dire.
Espère que cette aide.