【问题标题】:java: is there a framework that allows dynamically loading and unloading of jars (but not osgi)?java:是否有允许动态加载和卸载 jars(但不是 osgi)的框架?
【发布时间】:2010-12-08 20:22:49
【问题描述】:

我想要一种允许动态加载和卸载 jar 以及调用 jar 中的激活器类的机制。由于繁琐的导入/导出机制,我不想使用 OSGi。

【问题讨论】:

    标签: java classloader plugin-architecture


    【解决方案1】:

    有一个名为Java Plugin Framework 的项目可能是您正在寻找的。在他们的网页上,它声明该项目试图匹配和扩展 Eclipse 的 pre-OSGI 插件架构。它是一个通用框架,不依赖于 SWT/桌面应用程序。

    【讨论】:

      【解决方案2】:

      您可以使用ClassLoader 从 JAR 文件中动态加载类。动态加载类后,如有必要,可以显式调用初始化例程。与 Java 的其他部分一样,这种机制是垃圾收集的,因此无法显式卸载 JAR;当动态加载的类不再被引用并且垃圾收集已经运行时,由 JVM 释放 JAR。

      【讨论】:

      • 卸载并不是那么简单。所有对象都包含对其 Class 对象的隐式引用,其中包含对 ClassLoader 的引用,ClassLoader 包含对其加载的所有类的引用。您必须确保所有这些都可以先被垃圾回收。
      • @Adam,重读我的答案。我说过没有办法显式卸载 JAR,并且在“不再引用动态加载的类”之前不能释放它;我从来没有建议在类的实例仍然存在时不再引用这些类。显然,如果该类的实例仍然存在,那么该类仍然会被引用。
      【解决方案3】:

      JavaRebel,但它主要适用于开发,而不是生产部署。如果您正在寻找开源替代方案,可以关注this question

      【讨论】:

        猜你喜欢
        • 2012-03-31
        • 2016-12-29
        • 2018-12-14
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        • 2017-08-23
        相关资源
        最近更新 更多