我们如何优化CPU绑定的Java应用程序?

时间:2015-11-16 22:57:34

标签: java micro-optimization genetic-programming

我目前正在进行遗传编程方面的一些研究,而且我还无法访问多台计算机,以便我可以执行聚合计算。目前,我的家用台式机上只需要1.5小时的研究,所以它并不难以忍受,但随着分析变得更加先进,我预计数据量将大幅增加。

在这些条件下,我们可以通过哪些方式优化Java对处理器的使用?

1 个答案:

答案 0 :(得分:0)

由于您正在使用遗传编程,因此您需要花费大量操作来执行以下一项(或多项):

  • 计算下一代(交叉,变异)
  • 健身功能计算
  • 如果您的人口非常多,垃圾收集

要确定代码的热点,请使用JVisualVM,对于您的用例,采样窗格就足够了。

根据我的经验,我会说有两个主要可能的热点:

  • 缓慢的交叉和内存耗尽:这与非紧凑的个人表示有关。您可以通过减少个人的内存占用来获得显着的性能。尽可能尝试将其放在原始数组中。
  • 慢适应性:这比较困难,你可能想减少程序评估的数量,或者去寻找更重要的例子。

如果您正在使用固定大小的人口,您可以考虑在堆外工作,但这可能会使您的计划变得非常复杂。

我不知道你是否正在使用像JGAP这样的框架,但后者的速度非常慢,封装和大型调用堆栈太多。这对于概念的证明是非常好的,但是当事情变得密集时,你必须自己做。

编辑:阅读评论,我看到你的代码没有并行化,你必须绝对开始。这对于GP来说是微不足道的,只需并行运行适应度,然后并行运行下一代计算。