我有一个Java类,它做了这样的事情:
public void slowsDownOverTime() {
for (int i=0 ; i<nIter ; i++) {
BigObject bigObject = new BigObject();
// some code here that populates big object ...
CustomSerializer.write(bigObject);
}
}
我观察到的是,随着代码的迭代,序列化器写入所需的时间越来越长。当它开始运行时,序列化器只需要几毫秒的时间;经过数万次迭代后,它需要几秒钟才能运行。
当发生这种情况时,序列化器写入的磁盘并没有接近满,使用的 Java 堆空间也没有接近最大值。
尽可能地减少在此周期中创建和销毁的对象的数量和大小。这基本上耗尽了我解决这类问题的工具!
如何理解和纠正逐渐恶化的性能下降,请给予任何建议!
System.gc()
(例如每10_000
次迭代),问题是否仍然存在? - Turing85CustomSerializer.write
是慢的吗?你是在追加到文件中吗? - matt