--- old/src/share/classes/java/security/AccessController.java 2014-06-02 14:06:31.001995487 -0400 +++ new/src/share/classes/java/security/AccessController.java 2014-06-02 14:06:30.673995477 -0400 @@ -592,14 +592,24 @@ System.getSecurityManager() != null && !callerPD.impliesCreateAccessControlContext()) { - ProtectionDomain nullPD = new ProtectionDomain(null, null); - return new AccessControlContext(new ProtectionDomain[] { nullPD }); + return getInnocuousAcc(); } else { return new AccessControlContext(callerPD, combiner, parent, context, perms); } } + private static class AccHolder { + // An AccessControlContext with no granted permissions. + // Only initialized on demand when getInnocuousAcc() is called. + static final AccessControlContext innocuousAcc = + new AccessControlContext(new ProtectionDomain[] { + new ProtectionDomain(null, null) }); + } + private static AccessControlContext getInnocuousAcc() { + return AccHolder.innocuousAcc; + } + private static ProtectionDomain getCallerPD(final Class caller) { ProtectionDomain callerPd = doPrivileged (new PrivilegedAction() {