Go to file
Jakob Buchgraber c2de195f87 Improve performance of AsciiString.equals(Object).
Motivation:

The current implementation does byte by byte comparison, which we have seen
can be a performance bottleneck when the AsciiString is used as the key in
a Map.

Modifications:

Use sun.misc.Unsafe (on supporting platforms) to compare up to eight bytes at a time
and get closer to the performance of String.equals(Object).

Result:

Significant improvement (2x - 6x) in performance over the current implementation.

Benchmark                                             (size)   Mode   Samples        Score  Score error    Units
i.n.m.i.PlatformDependentBenchmark.arraysBytesEqual       10  thrpt        10 118843477.518 2347259.347    ops/s
i.n.m.i.PlatformDependentBenchmark.arraysBytesEqual       50  thrpt        10 43910319.773   198376.996    ops/s
i.n.m.i.PlatformDependentBenchmark.arraysBytesEqual      100  thrpt        10 26339969.001   159599.252    ops/s
i.n.m.i.PlatformDependentBenchmark.arraysBytesEqual     1000  thrpt        10  2873119.030    20779.056    ops/s
i.n.m.i.PlatformDependentBenchmark.arraysBytesEqual    10000  thrpt        10   306370.450     1933.303    ops/s
i.n.m.i.PlatformDependentBenchmark.arraysBytesEqual   100000  thrpt        10    25750.415      108.391    ops/s
i.n.m.i.PlatformDependentBenchmark.unsafeBytesEqual       10  thrpt        10 248077563.510  635320.093    ops/s
i.n.m.i.PlatformDependentBenchmark.unsafeBytesEqual       50  thrpt        10 128198943.138  614827.548    ops/s
i.n.m.i.PlatformDependentBenchmark.unsafeBytesEqual      100  thrpt        10 86195621.349  1063959.307    ops/s
i.n.m.i.PlatformDependentBenchmark.unsafeBytesEqual     1000  thrpt        10 16920264.598    61615.365    ops/s
i.n.m.i.PlatformDependentBenchmark.unsafeBytesEqual    10000  thrpt        10  1687454.747     6367.602    ops/s
i.n.m.i.PlatformDependentBenchmark.unsafeBytesEqual   100000  thrpt        10   153717.851      586.916    ops/s
2015-04-16 17:29:54 -07:00
all HTTP/2 codec missing from all/pom.xml 2015-03-23 16:29:28 -07:00
buffer ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
codec ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
codec-dns [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
codec-haproxy ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
codec-http Change AggregatedFullHttpMessage to contain a content ByteBuf 2015-04-16 14:43:50 +02:00
codec-http2 HTTP/2 Priority tree circular link 2015-04-15 14:26:05 -07:00
codec-memcache Returns after encoding each message not do check following instance types 2015-03-19 20:43:59 +01:00
codec-mqtt [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
codec-socks Hide password in exception messages of SocksAuthRequest 2015-03-17 17:25:09 +09:00
codec-stomp ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
codec-xml [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
common Improve performance of AsciiString.equals(Object). 2015-04-16 17:29:54 -07:00
example ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
handler The "null" ClassLoader is the bootstrap ClassLoader 2015-04-16 17:26:09 +02:00
handler-proxy ByteString introduced as AsciiString super class 2015-04-14 16:35:17 -07:00
license Integrate non-blocking XML parser as Netty codec (#2806) 2015-02-19 13:46:14 +01:00
microbench Improve performance of AsciiString.equals(Object). 2015-04-16 17:29:54 -07:00
resolver Use InetSocketAddress.getHostName() instead of getHostString() 2015-03-10 11:49:23 +09:00
resolver-dns [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
tarball [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
testsuite [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
testsuite-osgi [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
transport Small typos fixes in Channel's Javadoc 2015-03-21 16:10:24 +01:00
transport-native-epoll [#3539] Correctly handle EPOLLRDHUP 2015-04-14 06:57:11 +02:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2015-03-03 02:06:47 -05:00
transport-udt Motivation: If there are no readable bytes, it's unnecessary to go through javaChannel().write(). 2015-04-08 09:36:24 +02:00
.fbprefs Updated Find Bugs configuration 2009-03-04 10:33:09 +00:00
.gitignore Add JVM crash logs to .gitignore 2014-05-18 21:36:54 +09: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 Integrate non-blocking XML parser as Netty codec (#2806) 2015-02-19 13:46:14 +01:00
pom.xml Add support for ALPN when using openssl + NPN client mode and support for CipherSuiteFilter 2015-04-10 18:52:34 +02:00
README.md Add a link to the 'native transports' page 2014-07-21 12:54:24 -07:00
run-example.sh HTTP/2 examples run script support 2015-03-23 16:27:55 -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

The 'master' branch is where the development of the latest major version lives on. The development of all other 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.