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个)
我只是在列表上有太多的值,这导致:
正如你在图像中看到的,大多数创建的对象都与图表有关,我真的不能说太多,因为我不知道.有没有办法阻止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。基本上Series和Data很重,不应该用作原始数据的后备存储。
鉴于您一次仅显示 500 个值Series,您可以做的就是仅保留用户当前正在查看的这 500 个Data对象。Series根据滚动位置,从包含原始数据点的支持数组中添加新内容Data并删除旧内容。DataSeries
我在绘制连续传感器遥测数据的项目中做了类似的事情。自述文件显示了应用程序图像。您特别感兴趣的是更新 LineChart及其调用者的线条。