Java 将500 Mb文本文件加载到JTable时堆内存溢出

Java 将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)

我的任务是以表格的形式在text.DAT文件中显示数据。我使用Swing
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)来做到这一点:记忆中的一切。当然,内存表的合理实现可能还需要更多的思考;但不要只是说:“永远不要这样做”。