【问题标题】:Is there any way to judge whether a class has been loaded into jvm?有没有办法判断一个类是否已经加载到jvm中?
【发布时间】:2017-09-05 02:33:33
【问题描述】:

有没有办法判断一个类是否已经加载到jvm中? 在我看来,我认为方法是findClass,对吗?

【问题讨论】:

  • 这取决于您的要求。是在搜索类、通过字节码加载并因此具有.class 对象时,还是在它被初始化时?
  • 可能是被加载了,然后被删除了。所以我觉得不能从对象类来判断,比如aop机制。
  • 真正的问题可能是:为什么你认为这很重要?换句话说:通过这样的判断,你打算解决什么问题?
  • 面试被问到了,还是想不通。

标签: java jvm jvm-hotspot


【解决方案1】:

好的,所以我没有这样做。但似乎可以通过Instrumentation API 中的getAllLoadedClasses() 来实现。

但是您仍然需要使用 agent 启动 JVM。

【讨论】:

  • 根据 JVM,您可以在启动后动态加载代理,例如通过附加 API。 this answer 的末尾是一个示例程序,它附加到自己的 JVM 以将自己作为代理加载,最终获得 Instrumentation API。
【解决方案2】:

使用-verbose:class 开启类加载器日志并阅读日志。

【讨论】:

  • 如果你已经启动了JVM并且它正在运行呢?
【解决方案3】:

你可以使用jdk工具,比如JConsole。

【讨论】:

    最近更新 更多