title: VisualVM socket.read
body: <p>So I was profiling my application with VisualVM.</p>
  
  <p>I hit a hotspot about my MySQL interaction. My first thoughts was that hot spot was showing time that my application was waiting after the IO. But in the profiling report, VisualVM has two column "Time" and "Time (cpu)". Maybe the term is wrongly used, but I assumed self-time (cpu) column was excluding IO time. After more debugging, we concluded that assumption was wrong and was showing IO time because the hotspot was on java.net.SocketInputStream.read() of the MySQL driver and other IO things that should not cost any cpu.</p>
  
  <p>So, my question is why visualvm report SocketInputStream.read() as cpu time?</p>
  
  <p><img src="https://i.imgur.com/QZT7h.png" alt="Screnshot" title="Screenshot"></p>