java - RMI 内存不足异常

标签 java postgresql rmi

亲爱的大家, 我正在为我的程序使用 java rmi,从客户端我通过传递单个参数来调用我的接口(interface)方法。使用此参数接口(interface)运行查询并返回 40,000 行(每行包含 10 行)作为结果。所有这些都存储在 vector 结构 [[0,1,2,3,4,5,6,7,8 ,9],[],[],[],[],[]...]。当我单击一个按钮时,就会发生这种情况。第一次它的工作,但我再次尝试做同样的事情(即单击按钮)它显示 java.lang.out of memory exception at client side。请帮助我。我正在使用 Postgresql 数据库。

Client side:
    Vector data = new Vector();
    data = Inter.getEndProductDetailsForCopyChain(endProductId);

Server side:
    public Vector getEndProductDetailsForCopyChain(int endProductId1)
    {
        Connection OPConnect  = StreamLineConnection.GetStreamline_Connection();
        Vector data=new Vector();       
        try{        
            System.out.println("Before query data vector size>>>>>>>>"+data.size());//mohan
            String sqlQry = "select distinct style_no,version_no,matNo,type,specs,color,size,ref_no,uom1 from garment where id=" +endProductId1;
            System.out.println("sqlQry"+ sqlQry);
            Statement st=OPConnect.createStatement();
            ResultSet rs = st.executeQuery(sqlQry);
            while(rs.next()){
                Vector row = new Vector();
                row.add(rs.getString("style_no"));
                row.add(rs.getString("version_no"));
                row.add(rs.getString("matNo"));
                row.add(rs.getString("type"));
                row.add(rs.getString("specs"));
                row.add(rs.getString("color"));
                row.add(rs.getString("size"));
                row.add(rs.getString("ref_no"));
                row.add(rs.getString("uom1"));
                row.add(new Boolean(false));
                data.add(row);
                }
            System.out.println("After query data vector size>>>>>>>>"+data.size());
        }catch(Exception e)
        {    e.printStackTrace();
             closeConnection(OPConnect);
        }
            return data;
       }

我在完成我的过程后清除了所有 vector 和 HashMap ,但仍然在客户端抛出内存不足异常,这是在数据(查询结果 vector )分派(dispatch)到客户端时发生的。

最佳答案

直接回答您的问题:如果您可以更改客户端 JVM 命令行参数,则从分配更多内存开始。例如,使用 -Xmx256M 以使用 256 Meg 的最大内存

对您的问题更有用的回答:您表达问题的方式表明您知道真正的问题:一个程序架构试图通过一次点击获取如此多的数据。客户端真的需要这么多数据吗?你能在服务器端用它做一些处理并发送更少吗?可以加分页吗?还是延迟加载?

将 Google 的搜索模型视为一种可能的解决方案...Google 搜索“hello”大约有 310,000,000 个匹配项,但 Google 一次只向我发送 10 个结果。然后我单击“下一步”以获取更多...这是分页。用户通常无法同时理解 40,000 行数据。这对你有用吗?

如果这是为了导出,一次获取 100 行左右,导出它们,然后获取下一行......你真的不希望在一次调用中通过 RMI 传输这么多数据。

关于java - RMI 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4177199/

相关文章:

java - 如何将字符串映射到未知返回类型的java方法引用?

sql - 使用 PSQL 创建一个表作为另一个表的克隆但不包括列

postgresql - 如何撤销对用户 postgres 的复制访问权限?

php - DateTime 对象上的不同 timezone_types

Java RMI - 扩展为远程 "defined"接口(interface)(遇到非法远程方法)

java - RMI 解码异常

java - MockMvc 和 Mockito - java.lang.AssertionError : JSON path "$" Expected: a collection with size <2> but: collection size was <0>

java - 从图像中提取图像

java - antlr 4.2.2 输出到控制台警告 (157)

java - rmi 注册问题