Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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
“线程中的异常”;“主要”;java.lang.OutOfMemoryError:超出GC开销限制_Java_Out Of Memory - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.OutOfMemoryError:超出GC开销限制

“线程中的异常”;“主要”;java.lang.OutOfMemoryError:超出GC开销限制,java,out-of-memory,Java,Out Of Memory,我无法运行我的进程。它给出了以下异常:“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间” java-Xms32m-Xmx516m过滤器NP_属 线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:2882) 位于java.lang.AbstractStringBuilder.expandCapacity(AbstractString

我无法运行我的进程。它给出了以下异常:“线程中的异常”main“java.lang.OutOfMemoryError:java堆空间”

java-Xms32m-Xmx516m过滤器NP_属 线程“main”java.lang.OutOfMemoryError中出现异常:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:2882) 位于java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) 位于java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) 在java.lang.StringBuffer.append处(StringBuffer.java:306) 位于java.io.BufferedReader.readLine(BufferedReader.java:345) 位于java.io.BufferedReader.readLine(BufferedReader.java:362) 在FilteringSNP_genus.main(FilteringSNP_genus.java:65)

我尝试过不同的内存使用配置,如:

java-Xms32m-Xmx1024m过滤器

但它不起作用,增加-XmxVALUE会导致GC OverdeLimit Excepended异常:

线程“main”java.lang.OutOfMemoryError中出现异常:超出GC开销限制 位于java.lang.String.substring(String.java:1940) 位于java.util.StringTokenizer.nextToken(StringTokenizer.java:335) 在FilteringSNP_属.main(FilteringSNP_属.java:77)

有人能提供一些线索来解决这个问题吗


谢谢

我发现如果查找内存的时间太长,即使内存确实存在,GC也会放弃。最简单的问题是当内存大部分是虚拟内存时,这比真实内存慢得多。此外,如果内存太零碎,GC可能需要时间来找到所需的空间。如果你正在分配大块的内存,那会使情况变得更糟。这样的问题可能是间歇性的,当GC有时间清理房间并保持一切井然有序时工作正常,而当GC过载时则会出现故障。我的猜测是,在您的情况下,您要么有分页问题,要么在太大的块中使用了太多的可用内存

解决方案:获得更多的实际内存(如果分页是问题的话)。使用更少的内存。使用较小的内存块。数组是处理数字的最快方式,但带有指针的数据结构使GC的工作更轻松。如果您能找到一种使用较小数组(或不使用数组)的方法,请这样做


应该可以得到一个具有8GB或更多内存的合适的64位系统(计算机和JVM),这样您就可以忽略并忘记这个问题,但我还没有听说有人这样做。(并且内存使用扩展以填满可用内存…

我猜您是在从文件或套接字读取数据,并在不考虑影响的情况下为方便而使用。试试看

或者,您正在读取中的行,并将对它们的硬引用存储在内存中,因此,一旦您读得足够多,显然您的空间就不够了

至于GC开销错误,根据一个:
“如果在垃圾收集中花费的时间太多,并行收集器将抛出OutOfMemoryError:如果总时间的98%以上用于垃圾收集,而堆的恢复时间不足2%,则将抛出OutOfMemoryError。”

请提供更多信息:您的进程主要做什么(这是一个“Hello world”)或者它真的是一个需要所有内存的复杂系统)你能在FilteringSNP_genus.java:65周围发布代码吗?我肯定你指的是8GB,而不是8MB。换了,谢谢。(我希望没有人认为我还记得8MB的时候记忆很丰富。当我选择“G”时,我的手指滑了一下。)我记得1MB的时候很多:-)你在那里的最后一句话我不知道+1获取有趣和有用的信息!