代码之家  ›  专栏  ›  技术社区  ›  700 Software

如何减少Java程序的启动时间和内存消耗?

  •  2
  • 700 Software  · 技术社区  · 14 年前

    我认为Java的最新更新版本将提供更好的性能。

    我正在寻找一种方法来实现软件组件与无休止的循环或内存泄漏的隔离。Android将每个应用程序隔离在自己的进程中,而Google Chrome则将每个选项卡隔离在自己的进程中。

    我的主要缺点是 java 开始需要这么长时间,而且我想减少内存消耗。

    是否有任何备用的构建或更受控的启动来完成这一点?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Bill K    14 年前

    如果快速启动是你的目标,PC上的Java可能不是你的最佳选择。这需要几秒钟,因为这是从磁盘加载VM所需的时间。

    如果你想让你的应用启动得更快,很容易启动一个闪屏,只需创建一个只加载闪屏的模块,等待它完全显示,然后使用反射链接到你的“真实”主模块。

    (使用反射,因为否则它将在启动主程序之前通过引用拉入整个程序——至少这是它以前的工作方式)。

    如果你谈论的是运行时的性能,你不会通过改变语言更快,Java的速度和你能得到的一样快。您可以通过转换为C/C++来重写以适应这些平台(更少的OO、堆栈分配,而不是堆等),否则,一般使用的其他语言在速度上都不会接近Java。

    如果你真的需要快速启动,根据你在做什么,可能会有一些技巧。我看到了一些项目,试图保持Java VM在工具栏中运行,并允许您发出请求(告诉它启动应用程序)。这速度更快,但对用户提出了附加要求(加载此附加工具)

    另一种可能性是——如果你一直在启动/关闭小任务,而这正是启动困扰你的原因,那么你一定可以通过保持它不可见的运行来加速它。只需让Java应用程序打开一个套接字,然后监听命令,然后创建一个小的.exe或shell脚本,如果程序不运行,则可以启动程序,或者将命令发送到该套接字。这将完全消除初创企业的首次运行。

        2
  •  1
  •   bwawok    14 年前

    一般来说,Java的启动时间比其他语言要长得多。如果你在桌面应用程序上粘贴Java,很多类似启动时间的东西是由安装在客户端计算机上的JRE来决定的,而JRE是无法控制的。

    至于“无尽的记忆泄漏”…Java不会泄漏内存。如果你的程序成功了,修复它。

        3
  •  0
  •   Bill K    14 年前

    这是第二个答案,因为它完全不同,我的另一个答案太长了:)

    尝试编译它——我认为GCC可以编译它。这几乎可以完全消除您的启动。我相信Jikes曾经是IBM的Windows Java编译器,但我不知道它是否仍然被维护。

    请注意,对于长时间运行的应用程序,编译后的代码运行速度可能比JVM代码慢。