0

我尝试在 Google Nexus 7 上运行多线程 Java 程序(MapReduce 风格),并用

System.currentMillis();

我发现性能变化很大(Tegra 3 w/4 cores 上有 4 个线程),如下所示:

704 872 729 729 1086 778 1214 1045 749 768

但是,当我使用顺序版本时,我得到了这样的稳定​​数据:

928 851 850 842 863 917 873 905 853 870

我认为垃圾收集器是并发的,所以它也需要一个核心,这是造成大变化的原因吗?

为什么有时性能甚至比顺序版本差很多?

4

1 回答 1

0

我认为垃圾收集器也是多线程的,这是造成大变化的原因吗?

IMO,GC 不太可能是变异的原因。

为什么有时性能甚至比顺序版本差很多?

我们需要查看您的代码或 SSCE。不过,我猜原因是:

  • 这是一个不适合 Java 线程的性能特征的问题(例如创建线程的高成本),或者
  • 您的多线程解决方案存在严重的并发瓶颈和/或负载平衡。
于 2012-12-08T00:13:09.217 回答