Nashorn JSON.parse() - java.lang.OutOfMemoryError:Java堆空间 - JDK8u60 [英] Nashorn JSON.parse() - java.lang.OutOfMemoryError: Java heap space - JDK8u60

查看:185
本文介绍了Nashorn JSON.parse() - java.lang.OutOfMemoryError:Java堆空间 - JDK8u60的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Nashron发布说明他们修复了JSON解析器错误,但我仍然能够在新补丁8u60上产生(不同)错误。这次是OutOfMemoryError。

Nashron Release notes claims they fixed the JSON parser bugs, but I am still able to produce a (different) bug on new patch 8u60. This time it is OutOfMemoryError.

参考附件JSON [1](通常是类别和子类别关系)。当我尝试调用JSON.parse()时,它失败了。

Refer the attached JSON [1] (it is typically a Category & Subcategory relation). When I try to invoke JSON.parse() it is failing.

[1] http://jsfiddle.net/ manivannandsekaran / rfftavkz /


  1. 我试图增加堆大小,没有帮助,而不是获得
    OOM异常很快,它延迟了一点。

  2. 当我用Alpahnumberic替换所有整数键时,整个
    解析时间超快。 [2]

[2] https://jsfiddle.net/manivannandsekaran/8yw3ojmu/

我们等待修复原始错误差不多4个月了新路径引入了另一个错误(它真的令人沮丧,我不确定这些错误是如何从回归中逃脱的)。有没有可用的解决方法?是否可以使用其他众所周知的JSON解析器(如GSON或Jackson)覆盖默认的JSON解析器。

It is almost 4 months we waited to get the original bug fixed, now again the new path introduced a another bug (it is really frustrating, I am not sure how these bugs are get escaped from regression). Is there any workaround available? Is it possible to override default JSON parser with other well known JSON parsers (like GSON or Jackson).

这里是JJS的失败堆栈跟踪。

Here the stack trace of failure from JJS.

jjs> load("catsubcat/test.js")
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at jdk.nashorn.internal.runtime.arrays.IntArrayData.toObjectArray(IntArrayData.java:138)
        at jdk.nashorn.internal.runtime.arrays.IntArrayData.convertToObject(IntArrayData.java:180)
        at jdk.nashorn.internal.runtime.arrays.IntArrayData.convert(IntArrayData.java:192)
        at jdk.nashorn.internal.runtime.arrays.IntArrayData.set(IntArrayData.java:243)
        at jdk.nashorn.internal.runtime.arrays.ArrayFilter.set(ArrayFilter.java:99)
        at jdk.nashorn.internal.runtime.arrays.DeletedRangeArrayFilter.set(DeletedRangeArrayFilter.java:144)
        at jdk.nashorn.internal.parser.JSONParser.addArrayElement(JSONParser.java:246)
        at jdk.nashorn.internal.parser.JSONParser.parseObject(JSONParser.java:210)
        at jdk.nashorn.internal.parser.JSONParser.parseLiteral(JSONParser.java:165)
        at jdk.nashorn.internal.parser.JSONParser.parseObject(JSONParser.java:207)
        at jdk.nashorn.internal.parser.JSONParser.parseLiteral(JSONParser.java:165)
        at jdk.nashorn.internal.parser.JSONParser.parseObject(JSONParser.java:207)
        at jdk.nashorn.internal.parser.JSONParser.parseLiteral(JSONParser.java:165)
        at jdk.nashorn.internal.parser.JSONParser.parse(JSONParser.java:148)
        at jdk.nashorn.internal.runtime.JSONFunctions.parse(JSONFunctions.java:80)
        at jdk.nashorn.internal.objects.NativeJSON.parse(NativeJSON.java:105)
        at java.lang.invoke.LambdaForm$DMH/1880587981.invokeStatic_L3_L(LambdaForm$DMH)
        at java.lang.invoke.LambdaForm$BMH/1095293768.reinvoke(LambdaForm$BMH)
        at java.lang.invoke.LambdaForm$MH/1411892748.exactInvoker(LambdaForm$MH)
        at java.lang.invoke.LambdaForm$MH/22805895.linkToCallSite(LambdaForm$MH)
        at jdk.nashorn.internal.scripts.Script$5$test.:program(file:catsubcat/test.js:1)
        at java.lang.invoke.LambdaForm$DMH/1323165413.invokeStatic_LL_L(LambdaForm$DMH)
        at java.lang.invoke.LambdaForm$MH/653687670.invokeExact_MT(LambdaForm$MH)
        at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:640)
        at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:228)
        at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
        at jdk.nashorn.internal.runtime.Context.evaluateSource(Context.java:1219)
        at jdk.nashorn.internal.runtime.Context.load(Context.java:841)
        at jdk.nashorn.internal.objects.Global.load(Global.java:1536)
        at java.lang.invoke.LambdaForm$DMH/1323165413.invokeStatic_LL_L(LambdaForm$DMH)
        at java.lang.invoke.LambdaForm$BMH/1413378318.reinvoke(LambdaForm$BMH)
        at java.lang.invoke.LambdaForm$reinvoker/40472007.dontInline(LambdaForm$reinvoker)


推荐答案

问题在于Nashorn过晚地切换到稀疏数组表示。我为此提交了一个错误: https://bugs.openjdk.java.net/browse/ JDK-8137281

The problem is just that Nashorn switches to sparse array representation too late. I filed a bug for this: https://bugs.openjdk.java.net/browse/JDK-8137281

这篇关于Nashorn JSON.parse() - java.lang.OutOfMemoryError:Java堆空间 - JDK8u60的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆