0

当我运行下面的程序时,当 for 循环在 i=1031521 开始执行时出现异常。如何克服这种类型的内存使用?

class wwww
    {
        public static void main(String args[])
        {
            String abc[]=new String[4194304];
            String wwf="";
            int s_count=524286;
            for(int i=0;i<4194304;i++)
            {
                System.out.println("----------enter--------"+i);
                abc[i]=""+i;
                System.out.println("----------exit--------"+i);
            }
        }
    }

例外是:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2882)
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.
java:100)
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390
)
    at java.lang.StringBuilder.append(StringBuilder.java:119)
    at wwww.main(wwww.java:12)
4

3 回答 3

1

如何克服这种类型的内存使用?

不要执行这种类型的内存使用。您正在创建一般形式的 4194304 个字符串""+i。您不需要一次全部使用该格式的 4194304 个字符串。您一次只需要其中一个,如果有的话,您可以在每次需要时创建它。

于 2012-11-28T07:45:57.080 回答
1

这是因为您用尽了分配给您的 jvm 的所有堆空间。

您可以在运行程序时使用参数来指定要分配的堆大小。

这是一个例子:

java -Xmx256m MyClass

这里将分配最多 256 MB 的堆空间

于 2012-11-28T06:50:47.807 回答
0

您可以:

  1. 增加你给程序的堆大小。这是通过-Xmx命令行参数来完成的java
  2. 重新设计程序以使用更少的内存。您真的需要一次将所有这些字符串保存在内存中吗?
于 2012-11-28T06:52:28.513 回答