鉴于数组列表已经是一个巨大的对象,最坏的情况下,您试图避免的是2x的常数因子(您需要的内存是现在已经需要的内存的2倍)。换句话说,在这里尝试流式传输JSON是没有意义的。 如果你有一个对象流,每次从某个地方读取一个对象(比如,你正在遍历一个DB结果集,并将每一个“行”转换为一个对象,例如,使用JOOQ、JDBI或Hibernate,你想通过JSON发送这些对象),那么你想要的东西就很有意义。 换句话说,建议是:如果你想花点时间来减少这段代码的内存消耗,那么就回到最后生成一个巨大数组列表的代码,并将 that 改为一个流(小写的s.可能是一个实际的java.util.stream.stream,但更可能是一个迭代器或者只是一个不同的代码结构)。 然后再考虑JSON部分,完成后再研究this wiki page on streaming GSON。
1条答案
按热度按时间2w3kk1z51#
鉴于数组列表已经是一个巨大的对象,最坏的情况下,您试图避免的是2x的常数因子(您需要的内存是现在已经需要的内存的2倍)。换句话说,在这里尝试流式传输JSON是没有意义的。
如果你有一个对象流,每次从某个地方读取一个对象(比如,你正在遍历一个DB结果集,并将每一个“行”转换为一个对象,例如,使用JOOQ、JDBI或Hibernate,你想通过JSON发送这些对象),那么你想要的东西就很有意义。
换句话说,建议是:如果你想花点时间来减少这段代码的内存消耗,那么就回到最后生成一个巨大数组列表的代码,并将 that 改为一个流(小写的s.可能是一个实际的java.util.stream.stream,但更可能是一个迭代器或者只是一个不同的代码结构)。
然后再考虑JSON部分,完成后再研究this wiki page on streaming GSON。