在 SSJS 中使用 HashMap.put 方法时的性能损失

Performance loss when using HashMap.put method in SSJS

在我的 XPages 应用程序中,我经常使用 SSJS 对象 (com.ibm.jscript.std.ObjectObject) 来缓存数据。为了检查如果我改用 java.util.HashMaps 性能是否提高,我对以下代码片段 (SSJS) 的执行时间进行了基准测试:

所有三个代码片段都做同样的事情:它们创建并填充一个 SSJS 对象或一个 HashMap,其中包含不同类型的数据/对象。对于每个片段,我测量了超过 1000 次运行的平均执行时间,其中 n(= 片段中的最大循环索引)为 1000000(100 万)。基准测试是在 Domino 9.0.1 服务器上使用 java.lang.System.nanoTime .

执行的

执行次数的比例如下:

换句话说:

我的问题如下:

  1. 我经常看到使用 HashMap 存储数据的 SSJS 代码。 为什么不使用标准的 SSJS 对象,如果它们提供更好的 性能?
  2. 为什么使用 put 的效率要低得多 方法而不是 SSJS“。”设置 a 的值的符号 哈希图?

查看你的代码(你应该把代码放在那里,而不是图像),你是在比较苹果和橘子。

  oo = {};

初始化一次JS对象,在第二次循环中覆盖现有对象。

 hw = new HashMap();

每次生成一个新的对象,把旧的扔给垃圾收集器。那会比较慢。

您的结论:您的数据不支持“填充 一个 Hashmap 花费了 xx 长”。您编写的代码支持“创建和丢弃 HashMaps in quick sequence is slower”。

如果你想运行一个合理的测试你需要:

  • 创建一个对象(这是通常的用例)并将 "a lot of things" 放入其中并获得真正的想法:放入 100,000 个东西。然后读取 100,000 个,然后更新 100,000 个东西。

HashMap 的主要原因:您也可以在 Java 中使用它们,并且您不会像使用 JavaScript 对象那样意外地向它们添加功能。 dot 与 put 转换是由于不同的类型转换机制。