Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2012-11-15 19:37:23

  Trin - Wredotka

Trin
Wredotka
Zarejestrowany: 2008-05-16

[Java] OutOfMemoryError

Witam wszystkich.
Więc, mam taki problem do zrealizowania w javie. Program, w którym jest 10 list, każda po 250k lub 500k elementów typu Long.  Do tego listy są wypełniane liczbami losowymi z zakresu 0 - 9999999999. (na razie, w fazie prób przyjmuję listy o wpisanej "na sztywno" długości 250k )

Dostaję taki oto złowieszczy komunikat:

Kod:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.lang.Long.valueOf(Unknown Source)
    at Program.main(Program.java:19)

"Podręcznikowe" (czyt. znalezione w sieci) sposoby na zwiększenie przydziału pamięci przy uruchamianiu programu nic nie dają, lapek ma 1 GB ram więc za bardzo też nie poszaleję, chyba że chcę żeby się biedaczek zasapał.

Aha, podobno najlepszą strukturą do przechowania 10 list jest HashMap, także takie rozwiązanie przyjęłam. Nie da się w pętli zrobić 10 list o różniących się nazwach. HashMap pozwala je identyfikować kluczem. Jeśli ktoś bardziej doświadczony rzuci inne propozycje - chętnie je przyjmę.

Przedstawiam kod (po 2k poprawkach więc możliwe że gdzieś jest jakaś bzdura), pogrubiłam linijkę w której się wywala:

Kod:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Program {
    
    public static void main(String[] args) {
        long min =0L;
        long max =9999999999L;
        Random rand = new Random();
        Map<Integer, List> mapa = new HashMap<Integer, List>();
            for(int n=0; n<=9; n++){ 
                int x = 250000; 
                List<Long> lista = new ArrayList<Long>();
                for(int a=0; a<x; x++){ 
                    long zm =min+((long)(rand.nextDouble()*max));  
                    lista.add(zm); //Tu się wywala..
                }
                mapa.put(n,lista); //wrzucamy liste do HashMap'a
            }
            System.out.println(mapa.size()); //dla sprawdzenia, ale do tego momentu nie dochodzi :)
        
    }
}

Pierwszy raz spotykam się z takim wyjątkiem. Java zaskakuje..

pzdr.

Ostatnio edytowany przez Trin (2012-11-15 19:41:00)

Offline

 

#2  2012-11-15 21:20:58

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: [Java] OutOfMemoryError

W pętli licznikiem jest "a" a inkrementujesz "x"
nie ma za co ;)

//EDIT: Polecam debugowanie przez wypisywanie zmiennej, wystarczyło by dodać
System.out.println("a=" + a);
nad linią która się wywala i sama byś do tego doszła...

Ostatnio edytowany przez milyges (2012-11-15 21:23:26)

Offline

 

#3  2012-11-15 21:44:34

  Trin - Wredotka

Trin
Wredotka
Zarejestrowany: 2008-05-16

Re: [Java] OutOfMemoryError

milyges napisał(-a):

nie ma za co ;)

Dziękuję!!! Nie ma to jak świeże spojrzenie na kod :)

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)