我目前在遗传编程方面做了一些研究,并且我没有访问多台计算机(还),因此我可以执行聚合计算。目前,我的家用台式机上的研究只需要大约1.5小时,所以它不是难以忍受的,但随着分析变得更加先进,我预计数据的大小会有显着增加。我们如何优化CPU绑定的Java应用程序?
有什么方法可以优化Java在这些条件下处理器的使用?
我目前在遗传编程方面做了一些研究,并且我没有访问多台计算机(还),因此我可以执行聚合计算。目前,我的家用台式机上的研究只需要大约1.5小时,所以它不是难以忍受的,但随着分析变得更加先进,我预计数据的大小会有显着增加。我们如何优化CPU绑定的Java应用程序?
有什么方法可以优化Java在这些条件下处理器的使用?
既然你与遗传编程工作,你花很多操作执行下列操作之一(或多个):
要确定你的代码的热点,使用JVisualVM,采样窗格将足够您的用例。
从我的经验,我认为主要有两个可能的热点:
如果您使用的是固定大小的人群,那么您可能会考虑在堆外工作,但这可能会使程序显着复杂化。
我不知道你是否在使用像JGAP这样的框架,但是后者是致命的慢,太多的封装和大的调用堆栈。它对于概念证明是非常好的,但是当事情变得密集时,你必须自己去做。
编辑:阅读评论,我看到你的代码没有并行化,你必须绝对从头开始。这对于GP来说是微不足道的,只是平行运行适应度,然后平行进行下一代计算。
甚至[*令人尴尬*平行](https://en.wikipedia.org/wiki/Embarrassingly_parallel):) –
首先优化您的(未发布的)代码中的关键路径。然后,寻找更好的算法。 –
分析您的代码以分析它大部分时间花在哪里。这可以指导您尝试优化哪些部分。 –
配置文件内存使用和GC活动。有时只是增加虚拟机的堆大小可能是一个很大的胜利。 –