Skip navigation

Netty 4.0.21.Final released

After almost 3 weeks of hard work we are happy to announce the release of Netty 4.0.21.Final. This release contains bug-fixes and performance improvements.

This release is fully-compatible with previous netty 4.0.x releases.

Performance improvements

As stated before we did some performance improvements in this release. The following sub-sections show some more details to give a better idea about the impact.

PooledByteBufAllocator improvements

When using PooledByteBufAllocator with ThreadLocal cache disabled you will see some nice performance boost when allocate buffers > pageSize (which is 8196 bytes by default). Thanks to @pavanka (Facebook) for the contribution.

Last release (4.0.20.Final):

Benchmark                                                           (size)   Mode   Samples        Score  Score error    Units
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree           16384  thrpt        20      459.932        5.411   ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree           65536  thrpt        20      958.501        4.929   ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledHeapAllocAndFree             16384  thrpt        20      460.085        5.020   ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledHeapAllocAndFree             65536  thrpt        20      953.632        6.285   ops/ms

This release (4.0.21.Final):

Benchmark                                                           (size)   Mode   Samples        Score  Score error    Units
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree           16384  thrpt        20     2890.818       32.091   ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledDirectAllocAndFree           65536  thrpt        20     2953.811       18.865   ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledHeapAllocAndFree             16384  thrpt        20     2889.210       20.680   ops/ms
i.n.m.b.ByteBufAllocatorBenchmark.pooledHeapAllocAndFree             65536  thrpt        20     2957.992       61.097   ops/ms

For more details on this change see (#2582).

Recycler improvements

The old Recycler implementation was rewritten to be a lot faster. Thanks again to @belliothsmith (Datastax) for the contribution.

Last release (4.0.20.Final):

Benchmark                                                (size)   Mode   Samples        Score  Score error    Units
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    00000  thrpt        20 116026994.130  2763381.305    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    00256  thrpt        20 110823170.627  3007221.464    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    01024  thrpt        20 118290272.413  7143962.304    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    04096  thrpt        20 120560396.523  6483323.228    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    16384  thrpt        20 114726607.428  2960013.108    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    65536  thrpt        20 119385917.899  3172913.684    ops/s

This release (4.0.21.Final):

Benchmark                                                (size)   Mode   Samples        Score  Score error    Units
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    00000  thrpt        20 204158855.315  5031432.145    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    00256  thrpt        20 205179685.861  1934137.841    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    01024  thrpt        20 209906801.437  8007811.254    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    04096  thrpt        20 214288320.053  6413126.689    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    16384  thrpt        20 215940902.649  7837706.133    ops/s
i.n.m.i.RecyclableArrayListBenchmark.recycleSameThread    65536  thrpt        20 211141994.206  5017868.542    ops/s

For more details on this change see (#2570).

For more details on changes please refer to the next sections.

Most important changes / fixes

  • Epoll transport may cause StackOverflow when write many buffers via writev(...) (#2623)
  • Missing ensureAccessible() may cause SEGFAULT the JVM (#2622)
  • Could not find class 'sun.misc.Cleaner' on android (#2604)
  • Could not find class 'sun.nio.ch.DirectBuffer' on android (#2599)
  • Fix integer overflow in HttpObjectEncoder when write chunk > Integer.MAX (#2592)
  • Write to LITTLE_ENDIAN buffer in encoder is broken (#2587)
  • Inconsistent Little Endian Buffer Contents in 4.0.20.Final When Unsafe Enabled (#2580)
  • Optimize PoolChunk to not use DFS (#2582)
  • Faster Recycler implementation (#2570)
  • Provide a proper way to remove thread-local variables (#2578)

Visit here for the complete list of the changes.

As always please let us know if you find any issues. We love feedback!

Thank You

Every idea and bug-report counts and so we thought it is worth mentioning those who helped in this area. Please report an unintended omission.