我们提供在 Linux、AIX 和 HP-Ux (PA-RISC) 上运行的 Java 应用程序。我们似乎很难从在其他两种环境中运行良好的应用程序中获得可接受的 HP-Ux 性能水平。执行时间和内存消耗都是如此。
虽然我还没有找到关于“为什么”的权威文章,但我认为使用“top”测量内存消耗是一种粗略的方法,因为共享代码会产生误导性结果。但是,对于 HP-Ux 上的内存消耗已成为问题的客户站点,这就是我们所要做的。这一次,当我们从 Java 1.4 迁移到 Java 1.5(在 HP-Ux 11.23 PA-RISC 上)时,它才成为一个问题。“问题”是指机器停止创建新进程,因为我们已经耗尽了所有 16GB 的物理内存。
通过测量“之前”和“之后”的总“可用内存”,我们试图衡量 Java 应用程序消耗了多少。我编写了一个快速应用程序,将 10,000 个随机 64 位字符串存储在 ArrayList 中,并尝试使用这种方法来测量 Java 1.4 和 Java 1.5 下 Linux 和 HP-Ux 上的消耗。
结果:
惠普 Java 1.4 ~60MB
惠普 Java 1.5 ~150MB
Linux Java 1.4 ~24MB
Linux Java 1.5 ~16MB
谁能解释为什么会出现这些结果?这是“顶部”测量空闲内存的方式的一些特质吗?HP 上的 Java 1.5 真的消耗的内存是 Java 1.4 的 2.5 倍吗?
谢谢。