Java делает пока цикл arralyist проблема - PullRequest
0 голосов
/ 19 февраля 2011

Я хочу спросить, почему пространство кучи Java запускается при выполнении "NAME.add("Tom");"?

<%@ 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 ]

3 голосов
/ 19 февраля 2011

Обратите внимание, что в этом коде:

int count= 0;

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

Вы никогда не измените значение count в любом месте, и поэтому этот цикл будет выполняться постоянно. Если вы измените код так, чтобы вы каким-то образом изменили count (возможно, используя цикл for для подсчета в сторону увеличения), это должно исчезнуть. JVM, вероятно, исчерпывает пространство кучи, добавляя в коллекцию как можно больше копий Tom, что в конечном итоге приводит к исчерпанию доступной памяти.

1 голос
/ 19 февраля 2011

Вы не увеличиваете переменную count.

0 голосов
/ 19 февраля 2011

Посмотрите на этот код

int count = 0; делать { NAME.add ( "Томь"); } while (количество <2); </p>

Вы забыли увеличить count. Таким образом, в вашем коде будет выполняться бесконечный цикл, и вся ваша память будет занята.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...