我可以让Gson.fromJson()使用String.intern或使用StringPool来使用频繁使用的字符串

时间:2015-09-11 13:18:13

标签: java json gson string-interning

我正在使用Gson对大量JSON文档进行反序列化,性能分析表明垃圾收集工作正在紧张,因此停机时间非常长。我怀疑Gson为JSON文档中的所有元素创建了大量字符串,并且在处理之后,这些字符串会再次快速释放。

我用Google搜索,发现some discussion没有任何领先优势。

我同意实施所有字符串是没有用的,如果您指定应该实际应用的内容,通常实习可能很有用,例如: JSON中的地图键通常是一个不错的选择。

有没有办法告诉Gson哪些字符串是实习生,例如通过专门的序列化器?或者有没有办法让mapPool用于map-keys之类的东西,以避免必须一直在堆上分配这些项。

1 个答案:

答案 0 :(得分:0)

可能不是一个完整的解决方案,但我发现addDeserializationExclusionStrategy()允许在实际反序列化之前决定创建字段,这也有助于减少JSON解析带来的开销:

        new GsonBuilder().addDeserializationExclusionStrategy(new ExclusionStrategy() {

            @Override
            public boolean shouldSkipField(FieldAttributes f) {
                return false;
            }

            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
        }).