Java Swing中的JTable没有释放内存(字符串被大量使用)

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

标签: java string swing

输入hex文件可以包含至少50万行数据。因此,GUI应该显示所有这些。

当前实施:

  1. 创建JTable。
  2. 通过在Swing中扩展DefaultTableModel类来创建模型。例如HexModel
  3. 创建长度为0x10000的字符串数组,例如String [] dataString = new String [0x10000] 因为Intel hex文件中的每个地址记录都可以有最大0x10000个数据记录。
  4. 使用GAP字符串预填充此String数组,例如*。我们还需要在GUI中显示hex文件的GAP。
  5. 通过迭代当前地址记录的所有数据记录,将十六进制文件模型(通过解析输入hex文件创建)的数据字节数组存储到String数组dataString中。
  6. 创建字符串数组,例如rowString,长度为0x12,用于存储数据部分的地址,数据部分和ASCII字符串的字符串格式。
  7. 遍历长度为0xFFFF的数据记录,即0x10000 - 1,并将以下内容存储到rowString数组中。 一个。将地址存储到第一个索引中 湾存储来自长度为0x10的dataString数组的数据。 C。存储ASCII字符串。 (通过获取每个数据字节的ASCII值来创建ASCII字符串,将它们附加到StringBuilder并将其转换为String) 最后,将rowString数组添加到HexModel中。
  8. 对所有地址记录及其各自的数据记录完成迭代后,HexModel将更新为JTable。
  9. 请注意,启动GUI时没有性能问题。仅对于具有50万条记录(10MB文件)的hex文件,需要2到3秒。

    但内存消耗是一个很大的问题。对于10MB的hex文件,内存需要250MB。 主要问题是尽管我从GUI中的选项卡式窗格中关闭了加载的文件,但内存并未减少。

    我知道String被大量使用。但是处理这个用例的最佳方法是什么?

    请求您输入此内存问题。

    先谢谢。

0 个答案:

没有答案