Java做循环arraylist问题

时间:2011-02-19 03:31:58

标签: java arrays arraylist

我想问一下为什么在执行“NAME.add("Tom");”时会触发Java堆空间?

<%@ page import="java.util.*" %>

<%
try {
    ArrayList <String> NAME = new ArrayList<String>();
    int count= 0;

    do
    {
        NAME.add("Tom");
    } while ( count < 2);

    String[] name = NAME.toArray(new String[NAME.size()]);

%>

<script type="text/javascript">
    var output=[];
    <%int i = 0;%>

    <%while ( i < name.length ) { System.out.println(name[i]);%>
        output[<%=i%>] = [];
        output[<%=i%>][0] = '<%=name[i]%>';

    <% System.out.println("No exception in JAVASCRIPT.");i++;}%>
</script>

<%
} catch (Exception error ){System.out.println(error);}%>

3 个答案:

答案 0 :(得分:3)

请注意,在此代码中:

int count= 0;

do
{
    NAME.add("Tom");
} while ( count < 2);

你永远不会在任何地方更改count的值,因此这个循环将永远循环。如果您更改代码以便以某种方式更改count(可能通过使用for循环向上计数),这应该消失。通过向集合中添加尽可能多的Tom副本,JVM可能耗尽了堆空间,最终耗尽了可用内存。

答案 1 :(得分:1)

您没有递增count变量。

答案 2 :(得分:0)

看看这段代码

  

int count = 0;       做       {           NAME.add( “汤姆”);          } while(count&lt; 2);

您忘了增加count。因此,在您的代码中,它将执行无限循环并且将占用您的所有内存。