2017-04-10 4 views
3

Existe-t-il un moyen de juger si une classe a été chargée dans jvm? À mon avis, je pense que le chemin est findClass, n'est-ce pas?Y at-il un moyen de juger si une classe a été chargée dans jvm?

+0

Cela dépend de vos besoins. Est-ce lorsque la classe est recherchée, chargée via un code octet et qu'elle a donc un objet '.class', ou quand elle est initialisée? –

+0

Peut-être qu'il est chargé, puis est supprimé .So je pense que je ne peux pas juger de la classe d'objet, comme un mécanisme aop. – flower

+3

La vraie question est probablement: pourquoi pensez-vous que cela a de l'importance? En d'autres termes: quel est le problème que vous avez l'intention de résoudre en faisant un tel jugement? – GhostCat

Répondre

1

OK, donc je n'ai pas fait cela. Mais il semble que ce serait possible via getAllLoadedClasses() dans le Instrumentation API.

Mais alors vous devez toujours démarrer la JVM avec votre agent.

+0

En fonction de la JVM, vous pouvez charger les agents après le démarrage de façon dynamique, par ex. via l'API Attach. À la fin de [cette réponse] (http://stackoverflow.com/a/19912148/2711488) est un exemple de programme qui s'attache à sa propre JVM pour se charger en tant qu'agent pour finalement avoir les mains sur l'API 'Instrumentation'. – Holger

0

Activez la journalisation du chargeur de classe avec -verbose:class et lisez le journal.

+1

que se passe-t-il si vous avez déjà démarré la JVM et qu'elle est en cours d'exécution? – Eugene

0

Vous pouvez utiliser l'outil jdk, tel que JConsole.