Closed qiunet closed 2 years ago
压测在线3K. 每秒每人发30包 收20包. 每次ygc(11秒). 会创建两千万的CodedOutputStream 和 ByteArrayOutputStream. 和大量的字节数组对象
2: 23799859 951994360 com.google.protobuf.CodedOutputStream$OutputStreamEncoder 3: 23800055 571201320 java.io.ByteArrayOutputStream
因为处理序列化和反序列化没有切换线程, 可以使用ThreadLocal做对象缓存优化. 优化后, 几乎可以忽略. 我这固定是160个对象. YGC时间也延长到18秒.
388: 160 6400 com.google.protobuf.CodedOutputStream$OutputStreamEncoder 361: 421 10104 java.io.ByteArrayOutputStream
但是使用ByteBuffer构造CodedOutputStream 以及 CodedInputStream ,我没有找到好的优化方案
现在使用Netty的ByteBufOutputStream参考类似方法, 也可以实现对象缓存. 可以不用在堆内存里面产生大量的byte[]了!
合入到2.4.17版本发布
压测在线3K. 每秒每人发30包 收20包. 每次ygc(11秒). 会创建两千万的CodedOutputStream 和 ByteArrayOutputStream. 和大量的字节数组对象
因为处理序列化和反序列化没有切换线程, 可以使用ThreadLocal做对象缓存优化. 优化后, 几乎可以忽略. 我这固定是160个对象. YGC时间也延长到18秒.
但是使用ByteBuffer构造CodedOutputStream 以及 CodedInputStream ,我没有找到好的优化方案