OutOfMemoryError przy uploadowaniu duzych plikow

0

Pisze program, ktory za zadanie ma przeslac plik na serwer www za pomoca http POST. Korzystam przy tym z biblioteki ClientHttpRequest2. Program dziala dobrze dopoki wysylam pliki o rozmiarze ok 30-40mb. Przy wysylaniu np. pliku 150mb dostaje blad:
Exception in thread "Thread-4" java.lang.OutOfMemoryError: Java heap space

Wiem juz, ze za blad odpowiedzialny jest kod z biblioteki:

private void pipe(InputStream in, OutputStream out, boolean measureProgress) throws Exception {
    byte[] buf = new byte[5000];
    int nread;
    int navailable;
    int total = 0;
    synchronized (in) {
        while((nread = in.read(buf, 0, buf.length)) >= 0) {
            out.write(buf, 0, nread);
            total += nread;
            if ((_sp!=null) && (measureProgress)) {
                out.flush();
                _sp.bytesTransferred(total);
            }
        }
    }
    out.flush();
    buf = null;
}

Tylko pytanie - jak to poprawic??? Prosze o pomoc.

0

Musisz zwiększyć rozmiar sterty, np: java -Xms32m -Xmx128m nazwaPrgramu
Czyli w tym przypadku początkowy rozmiar sterty = 32MB a maksymalny = 128MB

0

Ale zwiekszenie sterty nie wyeliminuje problemu tylko pozwoli wysylac troche wieksze pliki. Probowalem juz wywolywac garbage collectora, ale nie wyglada na to zeby java miala ochote w tym momencie sprzatnac nim smieci.

0

moze SoftReference Ci pomoze?

pozrawiam

0

Probowalem przed chwila z SoftReference ale nie dalo rady...

0

Może powinieneś częściej wyrzucać dane z bufora (flush), a nie tylko na końcu i podczas pomiaru stanu wysyłania.

0

Nie pomaga - probowalem juz uzywac flusha zaraz po write, tak zeby byl wywolywany przy kazdym przebiegu petli, ale nie dalo to zadnych efektow.

1 użytkowników online, w tym zalogowanych: 0, gości: 1