使用JSON崩溃您的应用程序HEAP大小

时间:2015-02-09 07:43:13

标签: java arrays json out-of-memory

我使用大量JSON进行数据处理。最近在进行此类工作时,我遇到了一个奇怪的问题,最终出现在OEM中。(内存不足)。

String myInData = "[one,two,three,";
JSONArray myArray = new JSONArray(myInData);

如果运行上面的代码,它将超出堆空间(如果应用程序在自动GC中运行)。

在某些情况下,我不能指望数据格式正确,我无法检查每个键值是否格式正确。有没有办法检查JSONArray字符串是否正确有效?

1 个答案:

答案 0 :(得分:0)

我无法重现这一点。

当我针对来自GoogleCode的最新org.json JAR运行以下内容时,我收到一个抱怨语法错误的JSON异常。没有OOME。

[steve@newbox tmp]$ cat Test.java 
import org.json.*;

public class Test {
    public static void main(String[] args) throws Exception {
    String myInData = "[one,two,three,";
    JSONArray myArray = new JSONArray(myInData);
    }
}
[steve@newbox tmp]$ javac -cp org.json-20120521.jar Test.java
[steve@newbox tmp]$ java -cp org.json-20120521.jar:. Test
Exception in thread "main" org.json.JSONException: Missing value at 15 [character 16 line 1]
    at org.json.JSONTokener.syntaxError(JSONTokener.java:433)
    at org.json.JSONTokener.nextValue(JSONTokener.java:387)
    at org.json.JSONArray.<init>(JSONArray.java:116)
    at org.json.JSONArray.<init>(JSONArray.java:144)
    at Test.main(Test.java:6)
[steve@newbox tmp]$

结论:要么你有一个“狡猾的”JAR文件,要么你的代码中的OOME的实际原因是别的;例如在尝试(并且失败)解析JSON之后发生的事情。