基本上,情况如下:
班级ObjectGenerator
会生成大量对象X
并将其放入ArrayList<X>
。
类ObjectGenerator
在主线程中实例化。
UI线程( javaFX )接收UI事件,并在该事件的lambda处理程序中要求ObjectGenerator
的实例清除ArrayList<X>
并生成/填充它再次。
在其他地方,在软件中,对象X
以各种方式使用,特别是通过许多lambdas (使用流和过滤器,很多)包含类列表/地图的时间源。
问题是,ObjectGenerator
每次ObjectGenerator
生成对象时生成的对象数量只增加一倍(尽管每次都会清除列表/地图)。
发现之后,我尝试使用 VisualVM 跟踪内存泄漏,但我可以确认对象不是GC并保留在ObjectGenerator
,但不是原因。
底线:这可能是由于使用lambdas (每次填充封闭类中某种类型的集合)保留引用,这可能是由于读数是在UI线程中完成,所以,以某种方式保持引用,或者我应该继续寻找更“经典”的明显错误?