什么导致Android系统上多线程Java程序的性能变化?

时间:2012-12-07 23:57:12

标签: java android multithreading dalvik tegra

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

测量执行时间
System.currentMillis();

我发现性能差异很大(Tegra 3 w / 4内核上有4个线程),如下所示:

704 872 729 729 1086 778 1214 1045 749 768

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

928 851 850 842 863 917 873 905 853 870

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

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