我正在开发一个软件包,它大量使用数组(ArrayLists)。要处理的指令被放入要处理的数组队列中,然后在使用时从数组中删除。与绘图相同,数据被放置到数组队列中,数组队列被读取为绘图数据,并且在新数据进入时,最老的数据最终被删除。我们正在谈论成千上万的指令,在一个小时内,在任何时候,可能有200000个点被绘制出来,不断地增长/缩小数组。
过了一段时间,软件就会在处理指令的地方慢下来。至于正在处理的是什么,即系统是稳定的,有多少数据是绘制出来的,处理什么指令,没有什么真正的变化,只是一次又一次地处理类似的输入数据。
变量大小(不是定义的大小,根据需要添加/删除)数组/队列的“滥用”是否存在可能导致最终减速的内存问题?
是否有比字符串ArrayList更好的方法来充当队列?
谢谢!
发布于 2022-07-21 17:36:43
是的,您很可能在工作中使用了错误的数据结构。ArrayList是一个具有支持数组的列表,因此get()是快速的。
Java运行时库有一组非常丰富的数据结构,因此您可以编写得很好,并根据您需要的特性进行调试。您很可能应该使用一个或多个Queue。
我的猜测是,您忘记了删除数组中的值,因此JVM必须保留所有这些值。这是内存泄漏。
若要确认,请使用分析器查看内存和cpu的去向。Visualvm是个不错的独立品牌。Netbeans包括一个。
发布于 2022-07-22 16:34:52
VisualVM的使用起到了帮助作用。它显示了一种“消息”形式的大量使用,我正在将传入的数据转储到并忘记存在,因此当惰性变得明显时,它正在处理100万个字符,因为我从未限制它的大小。
https://stackoverflow.com/questions/73070182
复制相似问题