The Boolean class has cache for true and false and using it, will save memory and will faster than using create new instance of boolean. Using JMH[1] with a code test[2] the result was: Benchmark Mode Samples Mean Mean error Units m.BooleanBenchmark.newInstanceBoolean thrpt 20 49801.326 369.897 ops/s m.BooleanBenchmark.newInstanceString thrpt 20 365.080 27.537 ops/s m.BooleanBenchmark.valueOfBoolean thrpt 20 764906233.316 9623009.653 ops/s m.BooleanBenchmark.valueOfString thrpt 20 371.174 28.216 ops/s
The diff is on attachment or can is downloading the webdrev here: https://dl.dropboxusercontent.com/u/16109193/open_jdk/boolean_instance_of.zip [1] http://openjdk.java.net/projects/code-tools/jmh/ [2] @State(Scope.Thread) @OutputTimeUnit(TimeUnit.SECONDS) public class BooleanBenchmark { private static final int SIZE = 1_000_000; private List<String> booleanString; private boolean[] booleans; { booleans = new boolean[SIZE]; booleanString = new ArrayList<>(SIZE); for (int index = 0; index < SIZE; index++) { if (index % 2 == 0) { booleans[index] = true; booleanString.add(Boolean.TRUE.toString()); } else { booleans[index] = false; booleanString.add(Boolean.FALSE.toString()); } } } @GenerateMicroBenchmark public void valueOfBoolean() { for(boolean b: booleans) { Boolean result = b; } } @GenerateMicroBenchmark public void valueOfString() { for(String b: booleanString) { Boolean result = Boolean.valueOf(b); } } @GenerateMicroBenchmark public void newInstanceBoolean() { for(boolean b: booleans) { Boolean result = new Boolean(b); } } @GenerateMicroBenchmark public void newInstanceString() { for(String b: booleanString) { Boolean result = new Boolean(b); } } } -- Atenciosamente. Otávio Gonçalves de Santana blog: http://otaviosantana.blogspot.com.br/ twitter: http://twitter.com/otaviojava site: http://www.otaviojava.com.br (11) 98255-3513
diff -r 28d1de89ff27 src/share/classes/java/net/Socket.java --- a/src/share/classes/java/net/Socket.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/java/net/Socket.java Sat May 24 10:55:43 2014 -0300 @@ -1017,7 +1017,7 @@ if (isClosed()) throw new SocketException("Socket is closed"); if (!on) { - getImpl().setOption(SocketOptions.SO_LINGER, new Boolean(on)); + getImpl().setOption(SocketOptions.SO_LINGER, on); } else { if (linger < 0) { throw new IllegalArgumentException("invalid value for SO_LINGER"); diff -r 28d1de89ff27 src/share/classes/sun/font/SunFontManager.java --- a/src/share/classes/sun/font/SunFontManager.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/font/SunFontManager.java Sat May 24 10:55:43 2014 -0300 @@ -2871,8 +2871,7 @@ new java.security.PrivilegedAction<Object>() { public Object run() { SecurityManager sm = System.getSecurityManager(); - return new Boolean - (sm instanceof sun.applet.AppletSecurity); + return sm instanceof sun.applet.AppletSecurity; } }); return appletSM.booleanValue(); diff -r 28d1de89ff27 src/share/classes/sun/management/StackTraceElementCompositeData.java --- a/src/share/classes/sun/management/StackTraceElementCompositeData.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/management/StackTraceElementCompositeData.java Sat May 24 10:55:43 2014 -0300 @@ -68,7 +68,7 @@ ste.getMethodName(), ste.getFileName(), new Integer(ste.getLineNumber()), - new Boolean(ste.isNativeMethod()), + ste.isNativeMethod(), }; try { return new CompositeDataSupport(stackTraceElementCompositeType, diff -r 28d1de89ff27 src/share/classes/sun/management/ThreadInfoCompositeData.java --- a/src/share/classes/sun/management/ThreadInfoCompositeData.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/management/ThreadInfoCompositeData.java Sat May 24 10:55:43 2014 -0300 @@ -120,8 +120,8 @@ new Long(threadInfo.getLockOwnerId()), threadInfo.getLockOwnerName(), stackTraceData, - new Boolean(threadInfo.isSuspended()), - new Boolean(threadInfo.isInNative()), + threadInfo.isSuspended(), + threadInfo.isInNative(), lockedMonitorsData, lockedSyncsData, }; diff -r 28d1de89ff27 src/share/classes/sun/management/VMOptionCompositeData.java --- a/src/share/classes/sun/management/VMOptionCompositeData.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/management/VMOptionCompositeData.java Sat May 24 10:55:43 2014 -0300 @@ -59,7 +59,7 @@ final Object[] vmOptionItemValues = { option.getName(), option.getValue(), - new Boolean(option.isWriteable()), + option.isWriteable(), option.getOrigin().toString(), }; diff -r 28d1de89ff27 src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java --- a/src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/reflect/UnsafeBooleanFieldAccessorImpl.java Sat May 24 10:55:43 2014 -0300 @@ -33,7 +33,7 @@ } public Object get(Object obj) throws IllegalArgumentException { - return new Boolean(getBoolean(obj)); + return getBoolean(obj); } public boolean getBoolean(Object obj) throws IllegalArgumentException { diff -r 28d1de89ff27 src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java --- a/src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/reflect/UnsafeQualifiedBooleanFieldAccessorImpl.java Sat May 24 10:55:43 2014 -0300 @@ -35,7 +35,7 @@ } public Object get(Object obj) throws IllegalArgumentException { - return new Boolean(getBoolean(obj)); + return getBoolean(obj); } public boolean getBoolean(Object obj) throws IllegalArgumentException { diff -r 28d1de89ff27 src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java --- a/src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/reflect/UnsafeQualifiedStaticBooleanFieldAccessorImpl.java Sat May 24 10:55:43 2014 -0300 @@ -35,7 +35,7 @@ } public Object get(Object obj) throws IllegalArgumentException { - return new Boolean(getBoolean(obj)); + return getBoolean(obj); } public boolean getBoolean(Object obj) throws IllegalArgumentException { diff -r 28d1de89ff27 src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java --- a/src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/reflect/UnsafeStaticBooleanFieldAccessorImpl.java Sat May 24 10:55:43 2014 -0300 @@ -33,7 +33,7 @@ } public Object get(Object obj) throws IllegalArgumentException { - return new Boolean(getBoolean(obj)); + return getBoolean(obj); } public boolean getBoolean(Object obj) throws IllegalArgumentException { diff -r 28d1de89ff27 src/share/classes/sun/security/jgss/GSSManagerImpl.java --- a/src/share/classes/sun/security/jgss/GSSManagerImpl.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/security/jgss/GSSManagerImpl.java Sat May 24 10:55:43 2014 -0300 @@ -50,8 +50,8 @@ if (osname.startsWith("SunOS") || osname.contains("OS X") || osname.startsWith("Linux")) { - return new Boolean(System.getProperty - (USE_NATIVE_PROP)); + return Boolean.valueOf(System.getProperty + (USE_NATIVE_PROP)); } return Boolean.FALSE; } diff -r 28d1de89ff27 src/share/classes/sun/security/provider/PolicyFile.java --- a/src/share/classes/sun/security/provider/PolicyFile.java Thu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/security/provider/PolicyFile.java Sat May 24 10:55:43 2014 -0300 @@ -1271,7 +1271,7 @@ Boolean imp = AccessController.doPrivileged (new PrivilegedAction<Boolean>() { public Boolean run() { - return new Boolean(entry.getCodeSource().implies(cs)); + return entry.getCodeSource().implies(cs); } }); if (!imp.booleanValue()) {