我想从对象创建 JSON 字符串。
ObjectMapper om = new ObjectMapper();
String str = om.writeValueAsString(obj);
Run Code Online (Sandbox Code Playgroud)
有些对象很大,创建 JSON 字符串需要很长时间。创建 8MB JSON 字符串大约需要 15 秒。
我该如何改进这个?
确保有足够的内存:用于存储 8 MB 序列化 JSON 的 Java String在堆中需要大约 16 MB 的连续内存。
但更重要的是:你为什么要java.lang.String在内存中创建一个?这么大的String有什么用呢?
如果您需要将 JSON 内容写入文件,可以使用不同的方法;类似地写入网络套接字。至少您可以将输出写入byte[](减少 50% 的内存),但在大多数情况下,增量写入外部流只需要很少的内存。
15秒绝对是很慢的。如果没有 GC 问题,在初始预热后,Jackson 应该在不到一秒的时间内写入 8 兆字节,对于由标准 Java 类型组成的简单对象来说大约需要 10-20 毫秒。
编辑:
String刚刚意识到,在构造结果字符串期间,临时内存使用量也会加倍,因为构造时缓冲内容尚未清除。因此 8 MB 至少需要 32 MB 来构造 String。如果默认堆为 64 MB,这将无法正常工作。
| 归档时间: |
|
| 查看次数: |
10691 次 |
| 最近记录: |