我想问一下为什么在执行“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);}%>
答案 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
。因此,在您的代码中,它将执行无限循环并且将占用您的所有内存。