我正在使用Gson对大量JSON文档进行反序列化,性能分析表明垃圾收集工作正在紧张,因此停机时间非常长。我怀疑Gson为JSON文档中的所有元素创建了大量字符串,并且在处理之后,这些字符串会再次快速释放。
我用Google搜索,发现some discussion没有任何领先优势。
我同意实施所有字符串是没有用的,如果您指定应该实际应用的内容,通常实习可能很有用,例如: JSON中的地图键通常是一个不错的选择。
有没有办法告诉Gson哪些字符串是实习生,例如通过专门的序列化器?或者有没有办法让mapPool用于map-keys之类的东西,以避免必须一直在堆上分配这些项。
答案 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;
}
}).