gpt4 book ai didi

java - 能不能把所有的jar依赖打包在一个大jar里?

转载 作者:太空狗 更新时间:2023-10-29 22:59:03 25 4
gpt4 key购买 nike

我知道这不是“最佳实践”,但我可以将所有依赖项包含在一个大 jar 中吗?

最佳答案

我的感觉是,称 One-Jar 的表现糟糕和糟糕是不公正的。对于中等大小的应用程序,可以预计启动将花费几秒钟的时间(尽管这不会影响 JVM 启动画面)。对于大多数环境来说,几十兆字节的内存开销可以忽略不计,嵌入式系统除外。此外,One-Jar 能够自动将一些文件提取到文件系统,这在我的案例中省去了开发安装程序的需要。

下面尝试量化 One-Jar 对我的应用程序的性能影响。它是基于 Swing 的 GUI 应用程序,由 352 个使用 ProGuard 4.5b2 混淆的类组成。 One-Jar 0.96 用于将生成的类与值(value) 12MB 的库(ODFDOM、Saxon HE、Xerces、Jaxen、VLDocking、Apache Commons 等)捆绑在一起。我比较了经过混淆的 jar 与 One-Jar 处理的相同 jar 的性能。

  • 从 JVM 启动到 main() 方法启动:没有 One-Jar 需要 0.5 秒,使用 One-Jar 需要 1.7 秒。从 JVM 启动到屏幕上出现应用程序窗口:没有 One-Jar 需要 2.3 秒,使用 One-Jar 需要 3.4 秒。所以 One-Jar 将启动时间增加了 1.1 秒。
  • One-Jar 不会增加 JVM 启动和启动图像出现在屏幕上之间的延迟(如果通过 jar list 实现),因此启动时间的增加对于交互式应用程序来说不会太烦人。
  • 我们讨论的是类加载器,因此对代码执行速度应该没有影响,除非您广泛使用动态类加载。
  • 查看 JVM 统计数据(通过 jconsole)显示 One-Jar'red 版本占用更多堆内存。对于我的应用程序,开销大约为数十 MB。我看到了 16MB 与 40MB、306MB 与 346MB、131MB 与 138MB 之类的数字,具体取决于应用程序正在处理的用户数据量以及很久以前执行的垃圾收集器。

上述时间是通过在从 Linux shell 启动 JVM 之前、在 main() 方法的开头以及在我的应用程序窗口的 windowOpened() 事件处理程序中获取时间戳获得的。测量是在运行 Ubuntu 8.04 的双核 1GHz CPU 和 2G 或 RAM 的 D820 笔记本电脑上进行的,速度不是特别快。

希望对您有所帮助。

关于java - 能不能把所有的jar依赖打包在一个大jar里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1059851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com