1

我正在使用 Gson 反序列化大量 JSON 文档,性能分析表明垃圾收集很难跟上,因此暂停时间非常长。我怀疑 Gson 会为 JSON 文档中的所有元素创建大量字符串,并且在处理完这些元素后会很快再次释放出来。

我用谷歌搜索并发现了一些没有导致任何地方的讨论。

我同意实习所有字符串没有用,如果您指定应该实习哪些东西,实习通常很有用,例如 JSON 中的地图键通常是一个不错的选择。

有没有办法告诉 Gson 哪些字符串要实习,例如通过专门的序列化程序?或者有没有办法为映射键之类的东西设置一个 StringPool,以避免一直在堆上分配这些项目。

4

1 回答 1

-1

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

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

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

            @Override
            public boolean shouldSkipClass(Class<?> clazz) {
                return false;
            }
        }).
于 2015-09-11T13:26:24.300 回答