Selectors allow the JVM implementation to work efficiently with the operating systems select/epoll/kqueue (or equivalent) mechanism by pushing the work down into the appropriate kernel/driver. The modern OS implementation of such functions is generally considered to be O(1).
That is, Java itself can "sleep" until the underlying OS signals one or more channels - which is configured and reported in Java NIO via Selectors.
When in a loop with the Selector, select will "block" until there is a channel change - so keeping with the Selectors allows one to efficiently find the relevant channels and handle them. It's all part of the above goal to keep the "per-event" processing O(c), where c << n, when dealing with n channels.