1

ファイル全体を文字列オブジェクトとしてメモリにロードしようとしていますが、アプリケーションが終了した後、メモリがガベージ コレクタに解放されません。メモリ内のファイル全体を読み取るのは悪いことだとわかっていますが、データを別のクラスに転送する場合、コード全体をメモリにロードするのではなく、単なるストリームとしてこれを行う方法を誰か助けてもらえますか?そうでない場合は、現在のコードの何が問題なのか誰か教えてください

private   String processFile(FileItemStream item) throws IOException{

        InputStream is=null;

        try{
            is=item.openStream();
            return IOUtils.toString(is, "UTF-8");
        }
        finally {

            IOUtils.closeQuietly(is);

        }

    }




data=processFile(item)//method call
SomeClass(data);//passing the data string to this class
4

3 に答える 3

0

呼び出している API を変更して文字列以外のものを取得できない場合は、JVM のメモリを増やして問題を回避する必要があります。これは、パラメーターを JVM に送信することで変更できます。

-Xmx<size>

たとえば、このような設定を使用して、JVM に 2GB の最大ヒープを与えることができます

-Xmx2g

ただし、文字列をパラメーターとして受け入れる API を使用していて、数ギガバイトの文字列を渡そうとする場合、ほぼ確実に API を正しく使用していません。大量のデータを想定する API を作成する場合、単一の文字列をパラメーターとして使用して API を作成することはありません。幸運を。

于 2013-07-01T18:41:39.720 に答える