gpt4 book ai didi

java - 减少 JavaFX RAM 使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:37:07 24 4
gpt4 key购买 nike

我有一个显示 4 LineCharts 的 Java 程序实时。每一个都有 2 个系列(我使用 XYChart.Series<Number, Number>() 因为 LineChart.Series<Number, Number>() 显示警告)并且用户可以使用 slider 在 X 轴(水平)上导航。

我的问题是我需要在这些系列中为每个系列保留大约 10000 个(峰值)值,以便 usar 可以在图表上向左或向右移动(使用 slider ),总共有大约 80000 个值。

(该系列最多可存储 10000 个值,但图表会同时显示 500 个值,因此用户可以通过移动 slider 来选择他/她希望看到的 10000 个中的哪 500 个)

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

Object RAM usage 1 Object RAM usage 2

正如您在图像中看到的,大多数创建的对象都与图表相关,我真的不能说更多,因为我不知道。有什么方法可以防止 JavaFX 创建此对象?

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

enter image description here

一直在找资料,我觉得WeakReferenceQueue$ListEntry是标记为要删除的节点吗?但我不确定这一点,也不确定如何防止创建这些。

如何防止 JavaFX 创建如此多的对象? (节点?)

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

最佳答案

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

鉴于每个 Series 只显示 500 个值一次,你能做的就是只保留那 500 Data Series 中的对象用户当前正在查看。基于滚动位置添加新的 Data并删除旧的 DataSeries来自包含原始数据点的支持数组。

我在我的 project 中做了类似的事情关于绘制连续传感器遥测数据。自述文件显示应用程序图像。您特别感兴趣的是行 that update the LineChart及其 caller .

关于java - 减少 JavaFX RAM 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40911545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com