diff --git a/metrics-core/src/main/java/com/codahale/metrics/Clock.java b/metrics-core/src/main/java/com/codahale/metrics/Clock.java
index <HASH>..<HASH> 100644
--- a/metrics-core/src/main/java/com/codahale/metrics/Clock.java
+++ b/metrics-core/src/main/java/com/codahale/metrics/Clock.java
@@ -20,8 +20,6 @@ public abstract class Clock {
         return System.currentTimeMillis();
     }
 
-    private static final Clock DEFAULT = new UserTimeClock();
-
     /**
      * The default clock to use.
      *
@@ -29,7 +27,7 @@ public abstract class Clock {
      * @see Clock.UserTimeClock
      */
     public static Clock defaultClock() {
-        return DEFAULT;
+        return UserTimeClockHolder.DEFAULT;
     }
 
     /**
@@ -41,4 +39,8 @@ public abstract class Clock {
             return System.nanoTime();
         }
     }
+
+    private static class UserTimeClockHolder {
+        private static final Clock DEFAULT = new UserTimeClock();
+    }
 }
Move the default UserTimeClock to a holder class

This allows to avoid a deadlock when the user creates a new
UserTimeClock by hand. By creating a holder class we defer the
resolution of UserTimeClock class in the Clock class until the
`defaultClock` method invocation, rather than classloading.