Witam.
Mam problem z poprawą kawałka kodu.
Poniżej dwie funkcje, jedna wczytuje slownik z słowami danymi z pliku (sa to slowa jezyka polskiego, w pliku teksotym,jedno po drugim).
Drugi sprawdza dostepna pamiec.
Mam wymaganie ze pamiec na program to 70MB inaczej program sie wywali.
Ponizsze wcyztywnie wczyta tylko litery a A i braknie mu pamieci. Chche przerobic to tak aby wczytał słowa np. 3literowe.
Niestty nie działa to tak jak powinno - przez CASE ani IF. Nadal pamiec sie zapełnia pomimo ze w slowniku laduja tylko slowa 3 literowe - w efekcie tylko slowa 3 literowe na A. Nie moge zrozumiec dlaczego tak to dziala i jak to poprawic - dlaczego zapelnia pamiec skoro wybieram tylko słowa 3 literowe. W ponizszym przykladnie wczyta prawie wszyskie slowa na A - tylko nie potrzebuje takich dlugich słów.
//======================wczytywanie slownika =================================
public void LoadDictionary()
{
File file = null;
Scanner reader = null;
try
{
// otwarcie pliku
file = new File("slowa.txt");
reader = new Scanner(file);
String line = null;
line = reader.nextLine();
// jezeli brak slow w pliku, rzuc wyjatek
if (line == null)
throw new Exception("Pusty slownik!");
// wczytuj kolejne slowa z pliku
while (line != null)
{
//if (line.length() == 3) dictionary.add(line.toUpperCase());
dictionary.add(line.toUpperCase());
// jezeli zblizamy sie do limitu pamieci, przerwij wczytywanie
if (DictionarySize() > 60)
line = null;
else
line = reader.nextLine();
}
}
catch (Exception e)
{
System.err.println(e);
}
finally
{
reader.close();
}
}
public long DictionarySize()
{
MemoryMXBean memory = ManagementFactory.getMemoryMXBean();
long heapSize = memory.getHeapMemoryUsage().getUsed();
heapSize = heapSize / 1048576;
//System.out.println(heapSize);
return heapSize;
}