float基本类型在java中占有32位,也即4个字节,如果你同时位80万个记录分配内存,应该内存在4m左右,应该不会这么快导致out of memory吧!
或许你的程序中有其它东西占有了大量内存啊!同时80万条记录读出显示,不是很好吧!

解决方案 »

  1.   

    同时读80W条记录???真的BT呀,难为哥们了,呵呵~
      

  2.   

    float 是4byte 32bits
    Float对象就很难说了,一般java里面是得不到一个对象占用的空间大小的
      

  3.   


     1 use StringBuffer instead of String
     2 log
      

  4.   

    JTable中的TableModel要求存放的是对象呀,也就是说存放的应该是Float型的,那么80W个Float对象会占多大空间呢?
      

  5.   

    关注一下,Float 和 float 是不一样把
      

  6.   

    用户不允许分页显示吗?
    你这里除了Float会占用内存空间外,TableModel占用的空间更多。JTable再设置tablemodel的时候还会不会消耗额外空间那就不清楚了。
    总之80万记录你能一次显示出来,用户也看不过来
      

  7.   

    这不是 float 的问题。
    TableModel 默认处理时,使用的 JLabel 来显示文本(具体可以看看 DefaultTableModel 的JDK文档,里面有个 方法让你来设置 文本的颜色和字体等属性的,就是先获得一个 JLabel 对象,然后再进行设置的)。jvm -xms 没有不安全啊。不就是设置堆的最大容量吗??
    默认下 ,jvm -xms 64M
      

  8.   

    to  hesi726(hesi) :谢谢,那如何去解决这么大数据量在一个页面中进行显示出现的Out of Memory问题呢?
      

  9.   

    建议还是分页显示,主要还是因为一次显示太多数据用户也看不过来
    其实Swing还是有显示这么多数据的能力的,不信的话请试一试这个:import java.awt.BorderLayout;import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;public class BT
    {
    private static class BTTableModel extends AbstractTableModel {
    private float[][] btArray = null;

    private BTTableModel() 
    {
    btArray = new float[6][];
    for (int i = 0; i < btArray.length; i++) {
    btArray[i] = new float[80 * 10000];
    for (int k = 0; k < btArray[i].length; k++) {
    btArray[i][k] = (float) Math.random();
    }
    }
    } public int getRowCount()
    {
    return btArray[0].length;
    } public int getColumnCount()
    {
    return btArray.length + 1;
    } public Object getValueAt(int rowIndex, int columnIndex)
    {
    if (columnIndex == 0) {
    return new Integer(rowIndex + 1);
    }
    return new Float(btArray[columnIndex-1][rowIndex]);
    } public void setValueAt(Object aValue, int rowIndex, int columnIndex)
    {
    } public boolean isCellEditable(int rowIndex, int columnIndex)
    {
    return false;
    }
    }

    public static void main(String[] args)
    {
    JTable table = new JTable(new BTTableModel());
    JScrollPane sp = new JScrollPane(table);
    JFrame f = new JFrame();
    f.getContentPane().add(sp, BorderLayout.CENTER);
    f.setSize(800, 600);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.show(); System.out.println(table.getRowCount());
    }
    }80万行,每行7列,重要的是要自己写一个存储数据效率高的TableModel,不要用DefaultTableModel
    Swing的可伸缩性和扩展性还是很不错的。