【发布时间】:2012-07-25 01:54:41
【问题描述】:
我认为我的问题是不言自明的。确定我使用的 JVM 正在使用多个类加载器的最快和最准确的方法是什么?如果是,必须注意哪些事项才能确保程序正确运行?
编辑: 我想我需要澄清一下两个类加载器,它们可以加载同一个类吗?如果像单例这样只需要一个实例的类,我们如何防止它发生?
【问题讨论】:
标签: java jvm classloader embedded-resource contextclassloader
我认为我的问题是不言自明的。确定我使用的 JVM 正在使用多个类加载器的最快和最准确的方法是什么?如果是,必须注意哪些事项才能确保程序正确运行?
编辑: 我想我需要澄清一下两个类加载器,它们可以加载同一个类吗?如果像单例这样只需要一个实例的类,我们如何防止它发生?
【问题讨论】:
标签: java jvm classloader embedded-resource contextclassloader
必须注意哪些事项才能确保程序正确运行?
对于课程,我不知道。对于其他应用程序资源(图像、帮助文件等),请使用上下文类加载器。
【讨论】:
我正在为这个问题而苦恼。
每个 JVM 一直在运行多个类加载器:至少是系统类加载器、扩展类加载器和应用程序类加载器。 OSGi等..可以添加很多很多。
我很难在这里看到任何问题 - 类加载器的全部意义在于隔离命名空间。
【讨论】:
每个 JVM 都使用多个类加载器。
java -XX:+TraceClassLoading -version 2>&1 |剪切-d''-f2 | grep 类加载器
打印
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 的版本。
【讨论】: