【问题标题】:java performance Windows vs Linuxjava性能Windows与Linux
【发布时间】:2012-08-06 10:54:20
【问题描述】:

我开发了一个通常在 Linux 上运行的 Java 应用程序。这是一个带有 Swing 的 POJO 应用程序。性能相当不错。

现在我尝试在具有 2Gb RAM 的 Windows XP 上运行它,在一台具有相似或更高效能的机器上运行它,但性能要差得多。我观察到它使用了 100% 的 CPU。

例如:

  • 创建一个非常繁重的窗口的进程,其中包含许多组件:Linux 5 秒,Windows 12。
  • 使用繁重查询访问 PostgreSQL 数据库的进程(服务器和 JDBC 驱动程序相同):23 秒 Linux,Windows 43。

    我也尝试了具有类似功能的虚拟化 Windows 机器,结果明显更好!

    正常吗?我可以分配哪些参数来提高性能?

【问题讨论】:

  • 使用的文件系统是什么?如果您的虚拟化窗口在 ext3/4 上,它可以解释为什么您的虚拟化窗口性能更好。与 linux 相比,windows+ntfs 上的文件 I/O 通常非常慢。

标签: java windows linux performance


【解决方案1】:

除非您在同一台机器上比较 Linux 和 Windows XP,否则很难说有什么区别。可能是 CPU 更快,而 GFX 卡和磁盘子系统却更慢。

Java 将所有这些 IO 和 GFX 活动传递给底层操作系统,而您唯一能做的不同就是减少工作或提高工作效率。这可能会使两个系统都更快,因为您可以调整的操作系统并不特别。

【讨论】:

    【解决方案2】:

    尝试运行 Java Visual VM(作为 JDK 的一部分分发):附加到您的应用程序,然后使用 CPU Profiler 来准确确定所有 CPU 时间的去向。

    【讨论】:

    • 我尝试使用 VisualVM 进行分析。在 Linux 中运行正常,但在 Windows 中挂起(nbexec.exe 经常使用 99% 的 CPU,我认为这是一个 VisualVM 程序)。
    • VisualVM 在您使用分析器之前就挂了?听起来你的 Win XP 机器出了点问题。你需要解决我认为的问题,所以我只能提供一些猜测......(如果你想先说服,请在非 VM Windows 机器上再试一次。扫描病毒。确保你没有没有运行 2 个防病毒/防火墙。清洁 Java 安装。考虑图形驱动程序。使用 -Dsun.java2d.d3d=false 禁用 Direct3d。那种爵士乐。)
    【解决方案3】:

    JRE 部分的行为可能存在细微差别(想到 Swing),JRE 对不良做法的反应非常无情(例如从 Swing 中的错误线程执行操作)。

    由于您没有任何线索,我会尝试在两种环境中分析相同的用例,看看是否有任何显着差异出现在花费时间的地方。这有望揭示一个提示。

    编辑:并确保您在运行 Windows 时不会刹车(又名防病毒和其他可能会降低系统性能的“有用”软件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多