Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java eclipse中的堆和堆栈_Java_Eclipse_Heap_Stack Overflow_Out Of Memory - Fatal编程技术网

Java eclipse中的堆和堆栈

Java eclipse中的堆和堆栈,java,eclipse,heap,stack-overflow,out-of-memory,Java,Eclipse,Heap,Stack Overflow,Out Of Memory,我已经在Eclipse中编写了一个代码,它可以针对较小的输入值正常运行,但是一旦我的测试用例的大小增加,我就会得到OutOfMemoryException或StackOverFlow错误 我试图使用eclipse.exe-vmargs-Xmx1g使我的堆变为1G,但仍然得到相同的错误。当我尝试2G时,它说无法启动JVM 所以我想知道是否有任何方法可以让我运行这段代码。任何帮助都将不胜感激。提前谢谢 编辑: 这就是我堆积如山的地方。输入样本太大,导致记忆问题 while ((line = br.

我已经在Eclipse中编写了一个代码,它可以针对较小的输入值正常运行,但是一旦我的测试用例的大小增加,我就会得到
OutOfMemoryException
StackOverFlow
错误

我试图使用
eclipse.exe-vmargs-Xmx1g
使我的堆变为1G,但仍然得到相同的错误。当我尝试2G时,它说无法启动JVM

所以我想知道是否有任何方法可以让我运行这段代码。任何帮助都将不胜感激。提前谢谢

编辑: 这就是我堆积如山的地方。输入样本太大,导致记忆问题

 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);
}
public boolean addNode(T节点){
/*如果节点已经存在,则不执行任何操作*/
if(经理容器(节点))
返回false;
/*否则,添加具有一组空的传出边的节点*/
mGraph.put(节点,新HashSet());
返回true;
}
公共无效添加(T开始,T结束){
/*确认两个端点都存在*/
如果(!管理层容器(开始)| |!管理层容器(目的))
抛出新的NoSuchElementException(“两个节点都必须在图中”);
/*添加边*/
经理获取(开始)、添加(目的);
}

在Eclipse中,您可以在执行代码时设置VM的大小

转到
运行>运行配置
。然后在选项卡
Arguments
中,将
-Xms1000m
放在VM Arguments下。

跟进tskuzzy的:

对于堆

-Xms -Xmx
用于堆栈

-Xss

我建议
1g
用于
Xmx
Xmx
,而
8m
用于
-Xss

也许通过发布代码我们可以帮助您?更好的是,发布一个SSCCE这是一个开始,但我看不出代码中有任何真正的问题。也许在addEdge或addNode中,有一个快速爆发的递归?您可能应该公开整个类。为了更好地理解,您进行了更多的编辑。我希望这会有所帮助。您可以尝试使用-Xss选项增加堆栈大小,但一般来说,Guillaume Polet是正确的——如果代码中没有不受控制的递归,很难耗尽堆栈。如果您的测试行非常长,有很多空格,那么它也可能是split()。上面给出的代码就是我得到堆错误的地方。在这之后,我执行了一些递归DFS,在这里我得到了一个stackoverflow错误。如果我需要为同一次运行增加堆栈,我该如何实现呢?这个问题已经在这里解决了:tldr:你不能。您受到初始VM大小的限制。不,我实际上的意思是,我尝试了您为堆大小编写的代码,它对我有效,但对于进一步的递归调用,我的堆栈似乎不够。所以我的问题是,我可以同时为eclipse中的VM设置堆栈大小和堆大小吗?类似于-Xms1000m,-Xss256m之类的东西。我把参数放在VM配置中作为-Xms1000m-Xss64m,它就工作了。谢谢