Go to file
Carsten Varming d6bf388343 Prevent nepotism with generational GCs.
Motivation:

If a single Encoder object is promoted to the old generation then every object
reachable from the promoted object will eventually be promoted as well. A queue
illustrates the problem very well. Say a sequence of inserts and deletions
generate an object graph:

   A -> B -> C -> D -> E -> F -> G -> H,

the head of the queue is E, the tail of the queue is H, and A, B, C, D are
dead. If all queue nodes are in the young generation, then a young gc will
clean up the object graph and leave us with:

   E -> F -> G -> H

on the other hand, if B and C were previously promoted to the old generation,
then a young collection assumes the refernece from C to D is from a live object
(this is a key result of generational gc, no need to mark the old generation).
Hence the young collection assumes the refence to D is a gc root and leave us
with the object graph:

   B-> C -> D -> E -> F -> G -> H.

Eventually D, E, F, G, H, and all queue nodes ever seen from this point on will
be promoted, regardless of their global live or dead status. It is generally
trivial to fix nepotism issues by simply breaking the reference chain after
dequeuing a node.

Currently Encoder objects do not null their references when removed from the
hash map. We have observed a 20X increase in promoted Encoder objects due to
nepotism.

Modifications:

Null before, after, and next fields when removing Encoder objects from maps.

Result:

Fewer promoted Encoder objects, fewer Encoder objects in the old generation,
shorter young collection times, old collections spaced further apart (nepotism
is just really bad). Enjoy.
2016-03-23 17:27:00 +01:00
all [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
buffer Fix setBytes when source is read-only ByteBuffer and target is pooled buffer 2016-03-22 09:18:44 +01:00
codec [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
codec-dns [#4993] Correctly handle trailing dot in DNS requests and responses for the hostname. 2016-03-22 12:30:46 +01:00
codec-haproxy [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
codec-http Drop broken DefaultCookie name validation, close #4999 2016-03-22 12:32:09 +01:00
codec-http2 Prevent nepotism with generational GCs. 2016-03-23 17:27:00 +01:00
codec-memcache [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
codec-mqtt [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
codec-socks [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
codec-stomp [#5013] Fix typo in DefaultStompFrame.toString() method. 2016-03-23 10:48:13 +01:00
codec-xml [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
common Speed up the slow path of FastThreadLocal 2016-03-23 11:36:16 +01:00
example [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
handler Using distinct aliases when building the trust manager factory, and renamed trustCertChain into trustCertCollection. 2016-03-22 21:12:10 +01:00
handler-proxy [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
license added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
microbench Speed up the slow path of FastThreadLocal 2016-03-23 11:36:16 +01:00
resolver [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
resolver-dns Cleanup code and so eliminate warnings. 2016-03-23 09:38:58 +01:00
tarball [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
testsuite [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
testsuite-osgi [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
transport [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
transport-native-epoll Cleanup transport-native-epoll code. 2016-03-23 10:59:42 +01:00
transport-rxtx [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
transport-sctp [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01:00
transport-udt [maven-release-plugin] prepare for next development iteration 2016-03-21 11:51:50 +01: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 added support for Protobuf codec nano runtime 2016-01-19 21:39:17 +01:00
pom.xml Upgrade netty-tcnative to 1.1.33.Fork15 2016-03-23 11:46:13 +01: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 HTTP/2 Netty tiles example 2015-05-18 14:16:54 -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.