Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在部署的环境中对Hashmap.containsKey()的调用比本地调用慢100倍?_Java - Fatal编程技术网

Java 为什么在部署的环境中对Hashmap.containsKey()的调用比本地调用慢100倍?

Java 为什么在部署的环境中对Hashmap.containsKey()的调用比本地调用慢100倍?,java,Java,相同的代码,相同的数据。HashMap有大约40K个条目,由字符串键入。已使用System.nanoTime()确定计时 本地: 2015-08-21 12:46:09,958 DEBUG PERFORMANCE_ISSUE:55 - containsKey took 44336 部署: 2015-08-21 11:17:43,901 DEBUG PERFORMANCE_ISSUE:55 - containsKey took 4657210 我正在考虑GC或交换,但正在寻找其他想法…您可以检

相同的代码,相同的数据。HashMap有大约40K个条目,由字符串键入。已使用System.nanoTime()确定计时

本地:

2015-08-21 12:46:09,958 DEBUG PERFORMANCE_ISSUE:55 - containsKey took 44336
部署:

2015-08-21 11:17:43,901 DEBUG PERFORMANCE_ISSUE:55 - containsKey took 4657210

我正在考虑GC或交换,但正在寻找其他想法…

您可以检查以下内容:

  • 如果两者都在同一硬件上运行。检查分配给JVM的内存。非常低的内存会导致很好的延迟
  • 如果它们在不同的机器(硬件)上,则检查当前使用的内存和处理器是否会影响程序的运行时间
  • 虽然这不应该是一个问题,但您也可以在这两种情况下检查java版本

    • 孩子,我觉得自己很笨。这根本不是同一个代码。本地代码(fast)使用的是java.util.HashMap,由于我在这里不讨论的情况,部署的代码(slow)实际上以scala.collection.convert.Wrappers$MapWrapper结束

      因此,在调用慢速算法之前将MapWrapper中的值复制到真实的HashMap中就解决了这个问题


      无论如何,我感谢所有建议的答案。这是一个美好的社区。我很想删除这篇文章,但为了防止将来对其他人有所帮助,我会将其保留下来。

      你可以使用VisualVm分析GC这两个系统之间的区别是什么?这是一直较慢还是只是随机的?本地和部署环境的cofig有什么区别?你是如何进行计时的。顺便说一句,你可以有一个4毫秒抖动在你的系统没有GC。如果您没有裸机,操作系统可能会造成如此大的延迟。