如何检测我运行的JVM是否使用多个类加载器?

时间:2012-07-25 01:54:42

标签: java jvm classloader embedded-resource contextclassloader

我认为我的问题不言自明。确定我使用的JVM使用多个类加载器的最快,最准确的方法是什么?如果是这样,必须采取哪些措施来确保程序正确运行?

编辑: 我想我需要澄清两个类加载器的事实,他们可以加载同一个类吗?如果像单身一样的类只需要一个实例,我们怎样才能防止它发生?

3 个答案:

答案 0 :(得分:2)

  

必须注意确保程序正确运行?

对于课程,我不知道。对于其他应用程序资源(图像,帮助文件等),请使用上下文类加载器。

答案 1 :(得分:1)

我正在努力解决这个问题。

每个JVM始终运行多个类加载器:系统类加载器,扩展类加载器和应用程序类加载器至少。 OSGi等可以添加更多,更多。

我很难在这里看到任何问题 - 类加载器的重点是隔离命名空间。

答案 2 :(得分:1)

每个JVM都使用多个类加载器。

  

java -XX:+ TraceClassLoading -version 2>& 1 | cut -d'' - f2 | grep ClassLoader

打印

java.lang.ClassLoader
sun.reflect.DelegatingClassLoader
java.lang.ClassLoader$3
java.lang.ClassLoader$NativeLibrary
java.security.SecureClassLoader
java.net.URLClassLoader
sun.misc.Launcher$ExtClassLoader
java.lang.ClassLoader$ParallelLoaders
java.net.URLClassLoader$7
sun.misc.Launcher$ExtClassLoader$1
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$AppClassLoader$1
java.lang.SystemClassLoaderAction

其中一些是内部类,有些是相互扩展的,但这里有多个ClassLoader,我所做的只是要求JVM的版本。