Go to file
buchgr 67d3a78123 Reduce bytecode size of PlatformDependent0.equals.
Motivation:

PP0.equals has a bytecode size of 476. This is above the default inlining threshold of OpenJDK.

Modifications:

Slightly change the method to reduce the bytecode size by > 50% to 212 bytes.

Result:

The bytecode size is dramatically reduced, making the method a candidate for inlining.
The relevant code in our application (gRPC) that relies heavily on equals comparisons,
runs some ~10% faster. The Netty JMH benchmark shows no performance regression.

Current 4.1:

PlatformDependentBenchmark.unsafeBytesEqual      10  avgt   20     7.836 ±   0.113  ns/op
PlatformDependentBenchmark.unsafeBytesEqual      50  avgt   20    16.889 ±   4.284  ns/op
PlatformDependentBenchmark.unsafeBytesEqual     100  avgt   20    15.601 ±   0.296  ns/op
PlatformDependentBenchmark.unsafeBytesEqual    1000  avgt   20    95.885 ±   1.992  ns/op
PlatformDependentBenchmark.unsafeBytesEqual   10000  avgt   20   824.429 ±  12.792  ns/op
PlatformDependentBenchmark.unsafeBytesEqual  100000  avgt   20  8907.035 ± 177.844  ns/op

With this change:

PlatformDependentBenchmark.unsafeBytesEqual      10  avgt   20      5.616 ±   0.102  ns/op
PlatformDependentBenchmark.unsafeBytesEqual      50  avgt   20     17.896 ±   0.373  ns/op
PlatformDependentBenchmark.unsafeBytesEqual     100  avgt   20     14.952 ±   0.210  ns/op
PlatformDependentBenchmark.unsafeBytesEqual    1000  avgt   20     94.799 ±   1.604  ns/op
PlatformDependentBenchmark.unsafeBytesEqual   10000  avgt   20    834.996 ±  17.484  ns/op
PlatformDependentBenchmark.unsafeBytesEqual  100000  avgt   20   8757.421 ± 187.555  ns/op
2016-09-09 07:57:41 +02:00
all [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
buffer Share code between retain(...) and release(...) implementations. 2016-09-02 21:53:10 +02:00
codec [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-dns Add support for Client Subnet in DNS Queries (RFC7871) 2016-09-06 07:16:57 +02:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-http CorsHandler to respect http connection (keep-alive) header. 2016-09-06 07:18:53 +02:00
codec-http2 HTTP/2: Fix some errors reported by h2spec. 2016-09-01 08:28:16 +02:00
codec-memcache [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-mqtt [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-redis [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-smtp [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-socks [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-stomp [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
codec-xml [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
common Reduce bytecode size of PlatformDependent0.equals. 2016-09-09 07:57:41 +02:00
example [#5759] Allow websocket extensions in websocketx example. 2016-09-07 13:57:27 +02:00
handler Add startTls parameter to SslContextBuilder 2016-09-06 11:29:10 +02:00
handler-proxy [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
license added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
microbench Reduce bytecode size of PlatformDependent0.equals. 2016-09-09 07:57:41 +02:00
resolver [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
resolver-dns Add support for Client Subnet in DNS Queries (RFC7871) 2016-09-06 07:16:57 +02:00
tarball [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
testsuite Correct throw ClosedChannelException when attempt to call shutdown*(...) on closed EpollSocketChannel. 2016-09-01 08:16:02 +02:00
testsuite-osgi [maven-release-plugin] prepare for next development iteration 2016-08-26 10:06:32 +02:00
transport Log more details if notification of promise fails in PromiseNotifier and AbstractChannelHandlerContext 2016-09-07 06:55:38 +02:00
transport-native-epoll Correct throw ClosedChannelException when attempt to call shutdown*(...) on closed EpollSocketChannel. 2016-09-01 08:16:02 +02:00
transport-rxtx Remove @Deprecated for primitive WriteWaterMark getters and setters 2016-09-05 10:26:05 +02:00
transport-sctp Remove @Deprecated for primitive WriteWaterMark getters and setters 2016-09-05 10:26:05 +02:00
transport-udt Remove @Deprecated for primitive WriteWaterMark getters and setters 2016-09-05 10:26:05 +02:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Use shaded dependency on JCTools instead of copy and paste 2016-06-10 13:19:45 +02:00
.travis.yml Travis CI branch whitelisting 2013-03-11 09:55:43 +09:00
CONTRIBUTING.md Move the pull request guide to the developer guide 2014-03-12 13:13:58 +09:00
LICENSE.txt Relicensed to Apache License v2 2009-08-28 07:15:49 +00:00
NOTICE.txt added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
pom.xml Ensure we not sent duplicate certificates when using OpenSslEngine 2016-09-05 15:05:17 +02:00
README.md Updating Branches to look section to match the current branching structure of the project 2016-03-10 22:08:01 +01:00
run-example.sh Add an example client for codec-redis 2016-04-23 11:18:12 -07:00

Netty Project

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

How to build

For the detailed information about building and developing Netty, please visit the developer guide. This page only gives very basic information.

You require the following to build Netty:

Note that this is build-time requirement. JDK 5 (for 3.x) or 6 (for 4.0+) is enough to run your Netty-based application.

Branches to look

Development of all versions takes place in each branch whose name is identical to <majorVersion>.<minorVersion>. For example, the development of 3.9 and 4.0 resides in the branch '3.9' and the branch '4.0' respectively.