【问题标题】:Compare Java ClassLoader with Dynamic Load of native libraries比较 Java ClassLoader 和本地库的动态加载
【发布时间】:2014-01-28 09:01:58
【问题描述】:

我试图弄清楚 Java 类加载器在大型多模块项目中与使用 Win32 API 函数 LoadLibrary、GetProcAddress 动态加载本机库相比有哪些优势。

使用这两种技术对部署、版本控制、对 API 更改的敏感性有什么影响?事实上,维护的整体成本。

我也想知道的一些相关问题: - 类加载器是否有助于防止 DLL 地狱? - 如何实现多个模块的“并排”模式?

这是一个悬而未决的问题。即使您没有完整的答案,也请随时发表您的意见。

谢谢!

【问题讨论】:

    标签: java dll classloader


    【解决方案1】:

    嗯,这是针对同一目标的两种机制。动态库加载是在 JVM 或 .NET 被构想之前设计和实现的,并且(这是我特别喜欢的问题)后者中的任何一个都更顺利地做到这一点。

    应该通过在 DLL 的名称中包含版本号来防止 DLL 地狱,但是如果您不小心放入类路径中的内容,您可以在 java 中获得类似的效果。

    由于您可以完全控制应用程序的类路径,Windows DLL 开发的 syde-by-side 想法在 java 中是完全可行的——就像往常一样,完全确定您的类路径中有什么。如果您想研究 maven/gradle(构建自动化和依赖项管理)和 nexus(Java 的依赖项存储库)等工具,它们将帮助您以非常精确和轻松的方式管理您的依赖项。

    希望对你有用

    【讨论】:

    • 谢谢,有帮助!你说JVM管理依赖更顺畅。你能给我一些具体的例子/场景吗?
    • 嗯,正如我所说,这是一个品味问题,但在我的时代,在 Visual Studio 6.0 中构建一组具有动态 DLL 依赖项的项目就像骑着疯老虎做数独游戏一样通过它的尾巴。但是,尝试在 .NET 或 Java 中执行此操作感觉更加直观和容易 - 但我承认这仅意味着我的能力有所不同,因为已经过去了很多时间:P
    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2018-02-06
    • 2014-11-16
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多