【问题标题】:How can I detect whether the JVM I am running on is using multiple classloaders?如何检测我正在运行的 JVM 是否正在使用多个类加载器?
【发布时间】:2012-07-25 01:54:41
【问题描述】:

我认为我的问题是不言自明的。确定我使用的 JVM 正在使用多个类加载器的最快和最准确的方法是什么?如果是,必须注意哪些事项才能确保程序正确运行?

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

【问题讨论】:

    标签: java jvm classloader embedded-resource contextclassloader


    【解决方案1】:

    必须注意哪些事项才能确保程序正确运行?

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

    【讨论】:

      【解决方案2】:

      我正在为这个问题而苦恼。

      每个 JVM 一直在运行多个类加载器:至少是系统类加载器、扩展类加载器和应用程序类加载器。 OSGi等..可以添加很多很多。

      我很难在这里看到任何问题 - 类加载器的全部意义在于隔离命名空间。

      【讨论】:

        【解决方案3】:

        每个 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 的版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多