有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

处理java堆空间异常

那么,假设我有一个

  String s = "{(30,2884090,1410450570357,235),(30,2863348,1410451100148,285)}";
  Matcher match = Pattern.compile("(\\d+,)*\\d+").matcher(s);

所以有时候问题是,字符串s太大,导致堆错误:

 java.lang.OutOfMemoryError: Java heap space
 at java.util.Arrays.copyOfRange(Arrays.java:2694)
 at java.lang.String.<init>(String.java:203) 
  1. 如何将其作为异常处理,以便代码仍保持正常运行
  2. 有没有更好的方法来处理这么大的字符串

共 (2) 个答案

  1. # 1 楼答案

    看看here,它是处理不同类型的带字符串的OOM(内存不足)异常的绝佳资源。它展示了如何使用concatenation(简单,但也容易抛出错误!)或者StringBuffer(一个经过充分优化的解决方案)

    另外,如果需要,可以使用-Xmx command, some helpful hints here增加可用堆大小

  2. # 2 楼答案

    你不能把它当作例外处理。你可以选择:

    • 通过XMS/XMX参数(See here)增加JVM堆的大小
    • 使用流方法,因此并非所有内容都加载到内存中