web-dev-qa-db-fra.com

Java chargement de classe détaillé

J'essaie de lister l'ordre dans lequel le chargeur de classes Java charge les classes. Si j'utilise -verbose paramètre, il répertorie toutes les interfaces/classes qu'il charge, y compris des tonnes d'interfaces telles que sérialisables, exceptions, etc.

50
Bober02

Je suppose que votre meilleur pari est de faire ce qui suit:

  • Générez du texte fixe une fois que votre méthode main démarre et juste avant sa fin.
  • Canalisez la sortie verbeuse dans un fichier
  • Utilisez des choses comme moins ou grep pour trouver les classes chargées entre les deux balises de la méthode principale.

Il y a une question similaire et quelques réponses ici: Existe-t-il un moyen d'obtenir quelles classes un ClassLoader a chargé?

As-tu essayé -verbose:class?

53
nwinkler

Voici une expression sed qui analysera la sortie de Java -verbose: class pour produire des paires de nom de classe chargé et son fichier jar. Vous pouvez continuer à passer par un tri pour obtenir des fichiers jar uniques. Pour Exemple,

Java -verbose:class -version 2>/dev/null |
  sed -ne 's/\[Loaded \(.\+\) from \(.\+\)\]/\2/p' | 
  sort -u

les sorties

/usr/local/jdk1.7.0_67/jre/lib/rt.jar
7
Nicholas Sushkin