diff --git a/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java b/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java
index d9eb252..2019839 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java
@@ -34,7 +34,27 @@ public class Loader {
 
   private static boolean ignoreTCL = false;
   public static final String IGNORE_TCL_PROPERTY_NAME = "logback.ignoreTCL";
-  private static boolean HAS_GET_CLASS_LOADER_PERMISSION = false;
+  
+  /**
+   * Lazy-init inner class for the HAS_GET_CLASS_LOADER_PERMISSION constant.
+   * The HAS_GET_CLASS_LOADER_PERMISSION is quite expensive to initialize,
+   * so avoid initializing it until it is needed.
+   * 
+   * Lazy initialization holder class idiom for static fields ("Effective Java" p. 283)
+   */
+  private static class HasGetClassLoaderPermissionHolder {
+    private static boolean HAS_GET_CLASS_LOADER_PERMISSION = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+      public Boolean run() {
+        try {
+          AccessController.checkPermission(
+              new RuntimePermission("getClassLoader"));
+          return true;
+        } catch (AccessControlException e) {
+          return false;
+        }
+      }
+    });
+  }
 
   static {
     String ignoreTCLProp = OptionHelper.getSystemProperty(
@@ -44,18 +64,6 @@ public class Loader {
       ignoreTCL = OptionHelper.toBoolean(ignoreTCLProp, true);
     }
 
-    HAS_GET_CLASS_LOADER_PERMISSION =
-            AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-              public Boolean run() {
-                try {
-                  AccessController.checkPermission(
-                          new RuntimePermission("getClassLoader"));
-                  return true;
-                } catch (AccessControlException e) {
-                  return false;
-                }
-              }
-            });
   }
 
   /**
@@ -143,7 +151,7 @@ public class Loader {
    * @return
    */
   public static ClassLoader getClassLoaderAsPrivileged(final Class clazz) {
-    if (!HAS_GET_CLASS_LOADER_PERMISSION)
+    if (!HasGetClassLoaderPermissionHolder.HAS_GET_CLASS_LOADER_PERMISSION)
       return null;
     else
       return AccessController.doPrivileged(
