2012-04-16 8 views
0

Я написал код в Eclipse, который работает правильно для небольших входных значений, но как только мои тестовые примеры увеличиваются в размере, я получаю или StackOverFlow ошибки.куча и стек в eclipse

Я попытался использовать eclipse.exe -vmargs -Xmx1g, чтобы моя куча вышла на 1G, но я все равно получаю ту же ошибку. и когда я попробую 2G, он говорит, что не может запустить JVM.

так что я задаюсь вопросом, есть ли вообще какие-либо способы для запуска этого кода. любая помощь будет оценена по достоинству. заранее спасибо.

EDIT: Это то, где мои кучи переполняются. входной образец слишком велик и вызывает проблему с матерью.

while ((line = br.readLine()) != null) { 

     String[] linevalue= (line.trim().split("\\s+")); 
     int l= linevalue.length; 
     dg.addNode(Long.parseLong(linevalue[0])); 
     dg.addNode(Long.parseLong(linevalue[1])); 
     dg.addEdge(Long.parseLong(linevalue[0]), Long.parseLong(linevalue[1])); 

    } 

В другом классе присутствует следующий код, здесь mGraph - это HashMap.

public boolean addNode(T node) { 
    /* If the node already exists, don't do anything. */ 
    if (mGraph.containsKey(node)) 
     return false; 

    /* Otherwise, add the node with an empty set of outgoing edges. */ 
    mGraph.put(node, new HashSet<T>()); 
    return true; 
} 


public void addEdge(T start, T dest) { 
    /* Confirm both endpoints exist. */ 
    if (!mGraph.containsKey(start) || !mGraph.containsKey(dest)) 
     throw new NoSuchElementException("Both nodes must be in the graph."); 

    /* Add the edge. */ 
    mGraph.get(start).add(dest); 
} 
+1

Возможно, разместив код, мы могли бы вам помочь? Еще лучше, отправьте сообщение SSCCE http://sscce.org –

+0

, тоже, сэр! –

+1

это начало, но я не вижу никакой реальной проблемы в этом коде. Может быть, в addEdge или addNode есть рекурсия, которая быстро взрывается? Вы должны, вероятно, разоблачить все классы. –

ответ

1

В Eclipse вы можете установить размер виртуальной машины при выполнении кода.

Перейти к Run > Run configurations. Затем на вкладке Arguments введите -Xms1000m по аргументам виртуальной машины.

+0

, и если мне нужно увеличить свой стек для одного и того же запуска, как я могу это достичь? –

+0

Это решение было рассмотрено здесь: http://stackoverflow.com/questions/3408633/dynamically-increasing-java-heap-space tldr: Вы не можете. Вы ограничены начальным размером виртуальной машины. – tskuzzy

+0

Нет, что я на самом деле имел в виду, я пробовал то, что вы написали для размера кучи, и это сработало для меня, но для дальнейших рекурсивных вызовов мой стек казался недостаточным. Итак, мой вопрос к вам: могу ли я установить размер стека, а также размер кучи одновременно для виртуальной машины в eclipse? что-то вроде -Xms1000m, -Xss256m или того типа. –

0

Чтобы следить за tskuzzy-х answer:

Для кучи,

-Xms -Xmx 

Для стека

-Xss 

Я бы рекомендовал 1g для Xmx и Xmx и 8m для -Xss