减少 JavaFX RAM 使用
Reduce JavaFX RAM usage
我有一个 java 程序可以实时显示 4 LineCharts
。每个都有 2 个系列(我使用 XYChart.Series<Number, Number>()
,因为 LineChart.Series<Number, Number>()
显示警告)并且用户可以使用滑块在 X 轴(水平)中导航。
我的问题是我需要在这些系列中为每个系列保留大约 10000 个(峰值)值,以便 usar 可以在图表上向左或向右移动(使用滑块),总共有大约 80000 个值.
(该系列最多可存储 10000 个值,但图表同时显示 500 个值,因此用户可以 select 10000 个中的哪 500 个 he/she 想要查看移动滑块)
我只是在列表中有太多的值,这导致了这个:
正如你在图片中看到的,大多数创建的对象都与图表有关,我真的不能说更多,因为我不知道。有什么办法可以防止 JavaFX 创建这个对象吗?
总体 RAM 和 CPU 使用情况如下所示:(这让我相信我正在创建过多的对象并使 GC 工作过多)
一直在找资料,我觉得WeakReferenceQueue$ListEntry
是标记为移除的节点?但是我不确定这个,或者如何防止创建这些。
如何防止 JavaFX 创建这么多对象? (节点?)
这些图表只是目前的示例,每个系列大约有 4000 个值,CPU 和 RAM 使用率在使用更多数据(最多 10000 个)时会更高。
我假设您已经创建了 8 个 XYChart.Series
,并在每个中添加了全部 10000 个 XYChart.Data<X,Y>
值。 Series
对象将所有 Data
值存储在 ObservableList
中。 JavaFX 可观察性在内部使用弱引用,因此我假设每个 Data
对象都生成了一个弱引用。基本上 Series
和 Data
很重,不应该用作原始数据的后备存储。
鉴于您一次只能为每个 Series
显示 500 个值,您可以做的是只保留用户当前正在查看的 Series
中的那 500 个 Data
对象.根据滚动位置,从包含原始数据点的后备数组中添加新 Data
并删除 Series
中的旧 Data
。
我在 project 中对绘制连续传感器遥测数据做了类似的事情。
自述文件显示应用程序图像。
您特别感兴趣的是 that update the LineChart and its caller.
行
我有一个 java 程序可以实时显示 4 LineCharts
。每个都有 2 个系列(我使用 XYChart.Series<Number, Number>()
,因为 LineChart.Series<Number, Number>()
显示警告)并且用户可以使用滑块在 X 轴(水平)中导航。
我的问题是我需要在这些系列中为每个系列保留大约 10000 个(峰值)值,以便 usar 可以在图表上向左或向右移动(使用滑块),总共有大约 80000 个值.
(该系列最多可存储 10000 个值,但图表同时显示 500 个值,因此用户可以 select 10000 个中的哪 500 个 he/she 想要查看移动滑块)
我只是在列表中有太多的值,这导致了这个:
正如你在图片中看到的,大多数创建的对象都与图表有关,我真的不能说更多,因为我不知道。有什么办法可以防止 JavaFX 创建这个对象吗?
总体 RAM 和 CPU 使用情况如下所示:(这让我相信我正在创建过多的对象并使 GC 工作过多)
一直在找资料,我觉得WeakReferenceQueue$ListEntry
是标记为移除的节点?但是我不确定这个,或者如何防止创建这些。
如何防止 JavaFX 创建这么多对象? (节点?)
这些图表只是目前的示例,每个系列大约有 4000 个值,CPU 和 RAM 使用率在使用更多数据(最多 10000 个)时会更高。
我假设您已经创建了 8 个 XYChart.Series
,并在每个中添加了全部 10000 个 XYChart.Data<X,Y>
值。 Series
对象将所有 Data
值存储在 ObservableList
中。 JavaFX 可观察性在内部使用弱引用,因此我假设每个 Data
对象都生成了一个弱引用。基本上 Series
和 Data
很重,不应该用作原始数据的后备存储。
鉴于您一次只能为每个 Series
显示 500 个值,您可以做的是只保留用户当前正在查看的 Series
中的那 500 个 Data
对象.根据滚动位置,从包含原始数据点的后备数组中添加新 Data
并删除 Series
中的旧 Data
。
我在 project 中对绘制连续传感器遥测数据做了类似的事情。 自述文件显示应用程序图像。 您特别感兴趣的是 that update the LineChart and its caller.
行