The container is message-driven - it always has a thread (or threads) blocked in the provider's client library waiting for a new message to arrive - it's not polling the queue, it's polling the client. The receive timeout (default 5 seconds) is simply so the container can react to a stop() (otherwise the thread will be blocked in the client with no way to interrupt it - depending on the client's implementation).
If you turn on TRACE debugging, you'll see this activity - but please remember this does not mean there is a round trip to the broker each time, it's simply asking the client if a new message has arrived from the broker.
When the container creates the consumer, the broker knows about it and will send messages directly - there's no polling of the queue per se.