JavaFX:OutOfMemory,因为TableView中的VirtualFlow

时间:2018-05-09 09:53:44

标签: java javafx out-of-memory

情况:

  • 由于OutOfMemory异常
  • ,我们的应用程序崩溃了
  • 该应用程序包含一个带有TableView
  • 的主窗口
  • 在一个工作日内添加了几千行
  • 此窗口在整个工作日内未关闭

我们所知道的事情:

分析堆转储时,您会看到VirtualFlow(TableView的一部分)占用大量内存:

Memory usage VirtualFlow

详情

VirtualFlow有一个名为privateCells的内部数组。在读取源代码时,似乎永远不会清除该数组(例如,总是保存对TableRow的引用)。 TableRow可以使用数百KB的内存(取决于列数)。因此总的来说,这会导致大量内存的使用。

我认为发生了什么

我的假设是只有可见的TableRows(可能除了一些额外的行以提高滚动速度)实际上使用内存。

问题:

  1. 还有其他人看到过类似行为吗?

  2. 如何解决这个问题?

  3. 这是JavaFX框架中的错误还是使用TableView的错误?
  4. deps:

    • JDK 1.8.0_151
    • JavaFX8

0 个答案:

没有答案