Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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
使用FOR循环时发生java堆内存使用异常_Java_Memory Management_For Loop_Out Of Memory - Fatal编程技术网

使用FOR循环时发生java堆内存使用异常

使用FOR循环时发生java堆内存使用异常,java,memory-management,for-loop,out-of-memory,Java,Memory Management,For Loop,Out Of Memory,当我运行下面的程序时,当for循环在i=1031521开始执行时,我得到了异常。如何克服这种类型的内存使用 class wwww { public static void main(String args[]) { String abc[]=new String[4194304]; String wwf=""; int s_count=524286; for(i

当我运行下面的程序时,当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);
            }
        }
    }

这是因为您将耗尽分配给jvm的所有堆空间

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

这是一个例子:

java -Xmx256m MyClass
此处最多将分配256 MB堆空间

您可以:

  • 增加程序的堆大小。这是通过
    -Xmx
    java
    的命令行参数完成的
  • 重新设计程序以使用更少的内存。你真的需要一次将所有这些字符串保存在内存中吗
  • 如何克服这种类型的内存使用

    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);
                }
            }
        }
    

    不要执行此类型的内存使用。您正在创建4194304个字符串,其一般形式为
    “”+i
    。您不需要同时使用该形式的4194304个字符串。您一次只需要其中一个,如果有,您可以在每次需要时创建它。

    您可以在此处找到答案。