1

tableList型の配列リストに約12000レコードのデータベースを入力し、struts iteratorタグを使用してjspページに入力しようとしていますが、このアクションを何度も実行すると、jvmがメモリから不足し、私が見るようにページからこのアクションを呼び出すたびに、ヒープサイズが減少し続けます。このアクションクラスの新しいインスタンスが作成されるたびに、リストスペースの割り当てが解除されないと思います。この問題の解決策を提案します。また、tableList.clear( ); クラスのコンストラクターで

int records=0;
        spl("BEFORE: "+run.freeMemory()+"-"+run.totalMemory()+"-"+run.maxMemory());//spl is for system.out.println and run is an object of Runtime class
        while(resultSet.next())
        {
            records++;
            if(!resultSet.getString("service_date").equals("N/A"))
            {
                serviceYear=resultSet.getString("service_date").split("-");
                regnNumber=officeCode+"/"+resultSet.getString("serviceid_requested")+"/"+resultSet.getString("country_code")+"/"+resultSet.getString("service_file_srno")+"/"+serviceYear[2];
            }
            else
            {
                regnNumber=officeCode+"/"+resultSet.getString("serviceid_requested")+"/"+resultSet.getString("country_code")+"/"+resultSet.getString("service_file_srno")+"/0000";
            }
            tableList.add(new MISTable(regnNumber,resultSet.getString("given_name"),resultSet.getString("surname"),
                                        resultSet.getString("nationality"),resultSet.getString("service_date"),resultSet.getString("service_expiry_date"),
                                        resultSet.getString("passport_number"),resultSet.getString("passport_expiry_date"),resultSet.getString("visa_number"),
                                        resultSet.getString("visa_expiry_date"),resultSet.getString("visa_type"),"")
                                        );
        }
        spl("AFTER: "+run.freeMemory()+"-"+run.totalMemory()+"-"+run.maxMemory());
4

2 に答える 2

0

You can increase java memory arguments for running the application.

-Xms256m -Xmx512m -XX:MaxPermSize=128m

You can set maximum memory for java...

于 2012-12-06T09:05:45.747 に答える
0

ページネーションを使用してください!

リスト全体をロードして、ページ内の 1 ページ (10 レコードとしましょう) のみを表示することができます (キャッシュを使用したほうがよい)、または (はるかに優れている) 表示する必要がある結果セットの一部だけをロードして、結果を次のように制限します。 SQL。

12000 レコードを読み込んでページにダンプするのは間違っています。サーバーとクライアントに過負荷をかけます。ところで 、建物のように高いWeb ページを読みたい (またはスクロールしたい) 人はいますか?

于 2012-12-06T11:02:54.300 に答える