title: java TimeZone getDefault is very slow?
body: <p>I'm using the call TimeZone.getDefault frequently, and I've got reports on slowness from my customers. Checking the threads stack trace using jstack, I see that many threads are blocked on this method:</p>
  
  <pre><code>"LoadBalancerClientSubscriber(7)" prio=10 tid=0x00000000010c2000 nid=0x4055 runnable     [0x00002aaaebc79000]
     java.lang.Thread.State: RUNNABLE
      at java.util.TimeZone.getDefaultInAppContext(TimeZone.java:734)
      - locked &lt;0x0000000512916db0&gt; (a java.lang.Class for java.util.TimeZone)
      at java.util.TimeZone.getDefaultRef(TimeZone.java:630)
      at java.util.TimeZone.getDefault(TimeZone.java:622)
  "RequestServiceThreadPool(5)" prio=10 tid=0x00002aaae01b2800 nid=0x4022 waiting for     monitor entry [0x00002aaae8a47000]
     java.lang.Thread.State: BLOCKED (on object monitor)
      at java.util.TimeZone.getDefaultInAppContext(TimeZone.java:734)
      - waiting to lock &lt;0x0000000512916db0&gt; (a java.lang.Class for java.util.TimeZone)
      at java.util.TimeZone.getDefaultRef(TimeZone.java:630)
      at java.util.TimeZone.getDefault(TimeZone.java:622)
  </code></pre>
  
  <p>Is this a known behavior? Should I cache this TimeZone object? Is it safe to cache it, if my app is running for many months (even during DST change)?</p>
  
  <p>Thanks!</p>