NIO excessive Integer allocation
Alan Bateman
Alan.Bateman at oracle.com
Mon Oct 31 20:32:15 UTC 2016
Best to being this to nio-dev.
On 31/10/2016 20:20, Jon V. wrote:
> Hi everyone,
>
> EpollSelectorImpl.java #updateSelectedKeys() has a major object creation
> problem. It creates Integers in order to get the key from the map.
>
> Changing Integer.valueOf() to new Integer() might allow escape-analysis to
> remove the object.
>
> Otherwise, fdToKey could be change to a Map<Number, SelectionKeyImpl> and a
> new mutable Integer class could be created so only a single object would
> need to be created per select() instead of every Key.
>
> /**
> * Update the keys whose fd's have been selected by the epoll.
> * Add the ready keys to the ready queue.
> */
> private int updateSelectedKeys() {
> int entries = pollWrapper.updated;
> int numKeysUpdated = 0;
> for (int i=0; i<entries; i++) {
> int nextFD = pollWrapper.getDescriptor(i);
> SelectionKeyImpl ski = fdToKey.get(Integer.valueOf(nextFD));
> // ski is null in the case of an interrupt
> if (ski != null) {
> int rOps = pollWrapper.getEventOps(i);
> if (selectedKeys.contains(ski)) {
> if (ski.channel.translateAndSetReadyOps(rOps, ski)) {
> numKeysUpdated++;
> }
> } else {
> ski.channel.translateAndSetReadyOps(rOps, ski);
> if ((ski.nioReadyOps() & ski.nioInterestOps()) != 0) {
> selectedKeys.add(ski);
> numKeysUpdated++;
> }
> }
> }
> }
> return numKeysUpdated;
> }
More information about the jdk8u-dev
mailing list