2013-03-10 2 views
-1

У меня есть следующая программа, которая создает хэш-карту.java-программа для использования памяти

public class sample { 
    private HashMap<String, String> joindata = new HashMap<String, String>(); 

    public void map() 
    throws IOException{ 

     BufferedReader reader = new BufferedReader(new FileReader("/tmp/table2")); 

     String line; 
     String[] tokens; 

     while ((line = reader.readLine()) != null) 
     { 
      tokens = line.split(","); 

      if(tokens.length == 2) 
       joindata.put(tokens[0], tokens[1]); 
     } 

    } 
} 

Там, кажется, какая-то ошибка в этой реализации в моей куче достигающего 300M для этой программы, когда я беру 32M файла (/ TMP/table2) для чтения.

Может ли кто-нибудь предложить оптимизацию, которую я могу сделать, чтобы уменьшить размер кучи, 300 М кучи явно неправильной реализации.

+0

вы сделали кучу сваливать? – djechlin

+0

да вся память, занятую струнных и Чар []. Существует явная someth который я не могу понять .. – 0xhacker

+0

String и char [], которые принадлежат ...? Вы пытались запустить это в меньшем файле и посмотреть, есть ли у вас еще неожиданный объем памяти? – djechlin

ответ

1

Java не будет собирать мусор, пока ваша куча не заполнится. Это потребление памяти не является проблемой.

Попробуйте запереть свой основной поток (например, позвонить (new Object()).wait(), JMX в, сделать мусор собирать затем дамп кучи и ваше потребление будет выглядеть гораздо лучше.

+0

Я выбрал другой подход. Я просто сделал пустую петлю из своей основной функции после создания хэш-карты, и все не сильно изменилось. – 0xhacker

+1

пустой цикл будет иметь обратный эффект: он будет потреблять 100% -ный процессор, не позволяя GC для запуска. GC будет работать, когда процессор простаивает, а не когда он равен 100%. –

+0

@djechlin, в том числе (новый объект()). Wait() дает мне во время выполнения недостоверное обнаружение. – 0xhacker

0

Я думаю, что вы можете положить

System.gc() 

в конце своего цикла для принудительной сборки мусора, но я не уверен, что это поможет

+0

Это не так. Память кучи остается прежней. – 0xhacker

+0

Я старался изо всех сил :) – UberLambda