Java 将500 Mb文本文件加载到JTable时堆内存溢出
我的任务是以表格的形式在text.DAT文件中显示数据。我使用SwingJava 将500 Mb文本文件加载到JTable时堆内存溢出,java,swing,jtable,heap-memory,Java,Swing,Jtable,Heap Memory,我的任务是以表格的形式在text.DAT文件中显示数据。我使用SwingJTable创建表,但是由于文本文件是500 Mb,Java堆内存溢出。我理解这是由于为表的每一行创建的每个对象造成的 是否有任何方法可以在不增加堆内存的情况下解决此问题 相关代码如下:- JFrame f = new JFrame(); JTable tbl = new JTable(); DefaultTableModel dtm = new DefaultTableModel(0, 0)
JTable
创建表,但是由于文本文件是500 Mb,Java堆内存溢出。我理解这是由于为表的每一行创建的每个对象造成的
是否有任何方法可以在不增加堆内存的情况下解决此问题
相关代码如下:-
JFrame f = new JFrame();
JTable tbl = new JTable();
DefaultTableModel dtm = new DefaultTableModel(0, 0);
line = br.readLine();
String[] header = line.split(delimiter);
dtm.setColumnIdentifiers(header);
tbl.setModel(dtm);
while ((line = br.readLine()) != null) {
String[] data = line.split(delimiter);
dtm.addRow(data);
}
JScrollPane sp = new JScrollPane(tbl);
f.add(sp);
对于大数据集,唯一实用的解决方案是:不能一次将整个文件加载到内存中。即使它确实适合内存,加载它也需要很长时间。根据数据的不同,您可能能够动态加载所需的内容。或者,您可能必须将其加载到传统的数据库中,并在文件达到所需大小时翻页查看所需的行,这有点像是在尖叫“使用数据库”。顺便问一下,500 Mb内存中有多少条记录?旁注:除了将这么多内容加载到内存中之外,可能还需要改进。。。您是否检查了JVM启动选项?你知道,你可以告诉JVM你允许它消耗多少内存…扩展
AbstractTableModel
,正如建议的那样。@SlipperySeal在2016年,我会小心这些声明。现在很多服务器的内存只有半TB,甚至是满TB。内存价格呈指数级下降;人们正在构建完整的系统(比如Alluxio)来做到这一点:记忆中的一切。当然,内存表的合理实现可能还需要更多的思考;但不要只是说:“永远不要这样做”。对于大数据集,唯一切实可行的解决方案是:不能一次将整个文件加载到内存中。即使它确实适合内存,加载它也需要很长时间。根据数据的不同,您可能能够动态加载所需的内容。或者,您可能必须将其加载到传统的数据库中,并在文件达到所需大小时翻页查看所需的行,这有点像是在尖叫“使用数据库”。顺便问一下,500 Mb内存中有多少条记录?旁注:除了将这么多内容加载到内存中之外,可能还需要改进。。。您是否检查了JVM启动选项?你知道,你可以告诉JVM你允许它消耗多少内存…扩展AbstractTableModel
,正如建议的那样。@SlipperySeal在2016年,我会小心这些声明。现在很多服务器的内存只有半TB,甚至是满TB。内存价格呈指数级下降;人们正在构建完整的系统(比如Alluxio)来做到这一点:记忆中的一切。当然,内存表的合理实现可能还需要更多的思考;但不要只是说:“永远不要这样做”。