减少JavaFX RAM的使用

May*_*uso 7 java performance ram javafx

我有一个LineCharts实时显示4的java程序.其中每个都有2个系列(我XYChart.Series<Number, Number>()用作LineChart.Series<Number, Number>()显示警告),用户可以使用滑块浏览X轴(水平).

我的问题是我需要在这些系列中保持每个系列的10000(峰值)值,这样usar可以在图表上向左或向右(使用滑块),这总共产生大约80000个值.

(该系列最多可存储10000个值,但图表同时显示500个值,因此用户可以选择他/她想要看到的滑块中的500个中的500个)

我只是在列表上有太多的值,这导致:

对象RAM使用1 对象RAM使用2

正如你在图像中看到的,大多数创建的对象都与图表有关,我真的不能说太多,因为我不知道.有没有办法阻止JavaFX创建这个对象?

整体RAM和CPU使用情况如下所示:(这让我相信我正在创建过多的对象并使GC工作太多)

在此输入图像描述

我一直在搜索信息,我认为WeakReferenceQueue$ListEntry是一个标记为删除的节点?但我不确定这一点,或者如何防止创建这些.

如何防止JavaFX创建这么多对象?(节点?)

这些图表仅是现在采用的示例,每个系列大约有4000个值,当使用更多数据(最多10000个)时,CPU和RAM使用率会更高.

小智 0

我假设您已经创建了 8 个值XYChart.Series,并在每个值中添加了全部 10000 个XYChart.Data<X,Y>值。该Series对象将所有Data值存储在ObservableList. JavaFX 可观察性内部使用弱引用,因此我假设为每个对象生成一个弱引用Data。基本上SeriesData很重,不应该用作原始数据的后备存储。

鉴于您一次仅显示 500 个值Series,您可以做的就是仅保留用户当前正在查看的这 500 个Data对象。Series根据滚动位置,从包含原始数据点的支持数组中添加新内容Data并删除旧内容。DataSeries

我在绘制连续传感器遥测数据的项目中做了类似的事情。自述文件显示了应用程序图像。您特别感兴趣的是更新 LineChart及其调用者的线条。