"out" is a very special object which works differently from response.getWriter(), described in "JSP.1.7 Overall Semantics of a
JSP Page".
The "out" is being buffered, and won't be flushed until the buffer is full, or the page is done. "direct" here is a JspWriter which does not support buffering, so the output is immediate.
Try to add buffer="none" to your page directive, and see what the output is.