失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > java运行慢_Java程序运行一段时间后越来越慢

java运行慢_Java程序运行一段时间后越来越慢

时间:2021-11-02 03:57:07

相关推荐

java运行慢_Java程序运行一段时间后越来越慢

我有一个java程序,它是典型的机器学习算法,通过一些方程来更新某些参数的值:

for (int iter=0; iter<1000; iter++) {

// 1. Create many temporary variables and do some computations

// 2. Update the value for the parameters

}

更新参数的计算是相当复杂的,我必须创建许多临时对象,但是它们不被引用到循环中。循环中的代码是CPU密集型的,不访问磁盘。该程序加载相对较大的训练数据集,因此,我向JVM授予了10G内存(-Xmx10G),这远远大于它所需的(“6”由“顶”命令或窗口的任务管理器的峰值)。

我在几个linux机器(centos 6,24G内存)和一台窗口机(win7,12G)上进行了测试,同时安装了SUN Hotspot JDK / JRE 1.8。我没有指定除-Xmx之外的其他JVM参数。这两台机器都专用于我的程序。

在Windows上,我的程序运行良好:每次迭代使用非常相似的运行时间。然而,所有centos机器上的运行时间是奇怪的。

它最初运行正常,但在第七次/第八次迭代时显着减慢(〜10倍),然后在每次迭代中保持减速〜10%。

我怀疑这可能是由Java的垃圾收集器引起的。因此,我使用jconsole来监视我的程序。在两台机器上,次要GC都会发生很频繁,因为程序在循环中创建了许多临时变量。此外,我使用“jstat -gcutil $ pid $ 1s”命令并捕获统计信息:

[编辑]然而,两种机器的统计数据有很大的不同:

> Windows上的“S1”在0到50之间快速跳转,而在centos上保持“0.00”。

窗口上的“E”会从0到100迅速变化。当我打印每秒的统计数据时,屏幕截图不会显示其增量为100.然而,在“centos”中,“E”相对缓慢地向100增加,然后减小到0,并再次增加。

我的程序似乎是奇怪的行为是由于Java GC?我是Java性能监视器的新手,并没有一个很好的主意来优化GC参数设置。你有什么建议吗?非常感谢你!

如果觉得《java运行慢_Java程序运行一段时间后越来越慢》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。