Fwd: Boolean valueOf instead of new Boolean
-- Forwarded message -- From: roger riggs roger.ri...@oracle.com Date: Tue, May 27, 2014 at 3:02 PM Subject: Re: Boolean valueOf instead of new Boolean To: core-libs-dev@openjdk.java.net Hi Otávio, I can sponsor these two (Boolean and single char strings) for you. Because they cross over different repositories and require different reviews it would be more convenient to process each of them in two batches (client vs core) Please can you break out the 'client' changes into a separate webrev? The client packages are: (java and javax...) java2d, awt, swing, font, print, beans, media, imageio, applet, sound and accessibility. The client webrevs should be posted to awt-dev and the other two to core-libs, net-dev and servicability-dev. Thanks, Roger On 5/27/2014 1:16 PM, Otávio Gonçalves de Santana wrote: Can anyone help me as sponsor? On May 25, 2014 2:08 AM, Otávio Gonçalves de Santana otavioj...@java.net wrote: -- 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 e323c74edabd src/share/classes/sun/applet/AppletClassLoader.java --- a/src/share/classes/sun/applet/AppletClassLoader.java Wed Apr 23 11:35:40 2014 -0700 +++ b/src/share/classes/sun/applet/AppletClassLoader.java Tue May 27 21:47:24 2014 -0300 @@ -168,7 +168,7 @@ */ protected Class findClass(String name) throws ClassNotFoundException { -int index = name.indexOf(;); +int index = name.indexOf(';'); String cookie = ; if(index != -1) { cookie = name.substring(index, name.length()); @@ -608,7 +608,7 @@ // deal with URL rewriting String cookie = null; -int index = name.indexOf(;); +int index = name.indexOf(';'); if(index != -1) { cookie = name.substring(index, name.length()); name = name.substring(0, index); diff -r e323c74edabd src/share/classes/sun/awt/FontConfiguration.java --- a/src/share/classes/sun/awt/FontConfiguration.java Wed Apr 23 11:35:40 2014 -0700 +++ b/src/share/classes/sun/awt/FontConfiguration.java Tue May 27 21:47:24 2014 -0300 @@ -272,9 +272,9 @@ if (configFile != null) { return configFile; } -int decimalPointIndex = osVersion.indexOf(.); +int decimalPointIndex = osVersion.indexOf('.'); if (decimalPointIndex != -1) { -osMajorVersion = osVersion.substring(0, osVersion.indexOf(.)); +osMajorVersion = osVersion.substring(0, osVersion.indexOf('.')); configFile = findImpl(baseName + . + osName + . + osMajorVersion); if (configFile != null) { return configFile; diff -r e323c74edabd src/share/classes/sun/font/Type1Font.java --- a/src/share/classes/sun/font/Type1Font.java Wed Apr 23 11:35:40 2014 -0700 +++ b/src/share/classes/sun/font/Type1Font.java Tue May 27 21:47:24 2014 -0300 @@ -492,7 +492,7 @@ //Conversion: Expand abbreviations in style portion (everything after '-'), //replace '-' with space and insert missing spaces -pos = name.indexOf(-); +pos = name.indexOf('-'); if (pos = 0) { res = expandName(name.substring(0, pos), false); res += + expandName(name.substring(pos+1), true); @@ -513,8 +513,8 @@ //Conversion: Truncate style portion (everything after '-') //and insert missing spaces -if (tmp.indexOf(-) 0) { -tmp = tmp.substring(0, tmp.indexOf(-)); +if (tmp.indexOf('-') 0) { +tmp = tmp.substring(0, tmp.indexOf('-')); } return expandName(tmp, false); diff -r e323c74edabd src/share/classes/sun/jvmstat/monitor/AbstractMonitor.java --- a/src/share/classes/sun/jvmstat/monitor/AbstractMonitor.javaWed Apr 23 11:35:40 2014 -0700 +++ b/src/share/classes/sun/jvmstat/monitor/AbstractMonitor.javaTue May 27 21:47:24 2014 -0300 @@ -84,7 +84,7 @@ * {@inheritDoc} */ public String getBaseName() { -int baseIndex = name.lastIndexOf(.)+1; +int baseIndex = name.lastIndexOf('.') + 1; return name.substring(baseIndex); } diff -r e323c74edabd src/share/classes/sun/jvmstat/monitor/HostIdentifier.java --- a/src/share/classes/sun/jvmstat/monitor/HostIdentifier.java Wed Apr 23 11:35:40 2014 -0700 +++ b/src/share/classes/sun/jvmstat/monitor/HostIdentifier.java Tue May 27 21:47:24 2014 -0300 @@ -138,8 +138,8 @@ String frag = u.getFragment(); URI u2 = null; -int c1index = uriString.indexOf(:); -int c2index = uriString.lastIndexOf(:); +int c1index = uriString.indexOf(':'); +int c2index = uriString.lastIndexOf
Re: Boolean valueOf instead of new Boolean
Can anyone help me as sponsor? On May 25, 2014 2:08 AM, Otávio Gonçalves de Santana otavioj...@java.net wrote: Really Happy to hear that. Done. On Sat, May 24, 2014 at 5:10 PM, Andrej Golovnin andrej.golov...@gmail.com wrote: Hi Otávio, it would be nice, if you would not modify the classes sun.reflect.UnsafeXXXFieldAccessorImpl. This classes should be changed as a part of the fix for the issue JDK-5043030. The patch for this issue is already in work. Best regards, Andrej Golovnin On 24.05.2014, at 16:34, Otávio Gonçalves de Santana otavioj...@java.net wrote: 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 errorUnits m.BooleanBenchmark.newInstanceBooleanthrpt20 49801.326 369.897 ops/s m.BooleanBenchmark.newInstanceString thrpt20 365.080 27.537ops/s m.BooleanBenchmark.valueOfBoolean thrpt20 764906233.316 9623009.653 ops/s m.BooleanBenchmark.valueOfString thrpt20 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 ListString 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 boolean.diff -- 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
Re: Boolean valueOf instead of new Boolean
Hi Otávio, I can sponsor these two (Boolean and single char strings) for you. Because they cross over different repositories and require different reviews it would be more convenient to process each of them in two batches (client vs core) Please can you break out the 'client' changes into a separate webrev? The client packages are: (java and javax...) java2d, awt, swing, font, print, beans, media, imageio, applet, sound and accessibility. The client webrevs should be posted to awt-dev and the other two to core-libs, net-dev and servicability-dev. Thanks, Roger On 5/27/2014 1:16 PM, Otávio Gonçalves de Santana wrote: Can anyone help me as sponsor? On May 25, 2014 2:08 AM, Otávio Gonçalves de Santana otavioj...@java.net wrote:
Boolean valueOf instead of new Boolean
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 errorUnits m.BooleanBenchmark.newInstanceBooleanthrpt20 49801.326 369.897 ops/s m.BooleanBenchmark.newInstanceString thrpt20 365.080 27.537ops/s m.BooleanBenchmark.valueOfBoolean thrpt20764906233.316 9623009.653 ops/s m.BooleanBenchmark.valueOfString thrpt20 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 ListString 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.javaThu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/java/net/Socket.javaSat 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.javaThu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/font/SunFontManager.javaSat May 24 10:55:43 2014 -0300 @@ -2871,8 +2871,7 @@ new java.security.PrivilegedActionObject() { 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
Re: Boolean valueOf instead of new Boolean
On 05/24/2014 06:34 PM, Otávio Gonçalves de Santana wrote: 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: I agree Boolean.valueOf (whether explicit or implicit) should be used if identity is not required. Do you really need explicit Boolean.valueOf in, say, GSSManagerImpl, instead of relying on autoboxing? That said, your benchmark is not correct. At very least, you have to use explicit BlackHoles to avoid DCE [1][2]. This is how you do it: @State(Scope.Thread) @OutputTimeUnit(TimeUnit.SECONDS) public class BooleanBenchmark { @Param(100) private int size; private ListString booleanString; private boolean[] booleans; @Setup public void s() { booleans = new boolean[size]; booleanString = new ArrayListString(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(BlackHole bh) { for (boolean b : booleans) { Boolean result = b; bh.consume(result); } } @GenerateMicroBenchmark public void valueOfString(BlackHole bh) { for (String b : booleanString) { Boolean result = Boolean.valueOf(b); bh.consume(result); } } @GenerateMicroBenchmark public void newInstanceBoolean(BlackHole bh) { for (boolean b : booleans) { Boolean result = new Boolean(b); bh.consume(result); } } @GenerateMicroBenchmark public void newInstanceString(BlackHole bh) { for (String b : booleanString) { Boolean result = new Boolean(b); bh.consume(result); } } } Thanks, -Aleksey. [1] http://hg.openjdk.java.net/code-tools/jmh/file/75f8b23444f6/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_08_DeadCode.java [2] http://hg.openjdk.java.net/code-tools/jmh/file/75f8b23444f6/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_09_Blackholes.java
Re: Boolean valueOf instead of new Boolean
Hi Alexis. Thank you for fixes the benchMarck. About the class GSSManagerImpl, yes it is necessary because the System.getProperty(USE_NATIVE_PROP) returns a String. On Sat, May 24, 2014 at 12:19 PM, Aleksey Shipilev aleksey.shipi...@oracle.com wrote: On 05/24/2014 06:34 PM, Otávio Gonçalves de Santana wrote: 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: I agree Boolean.valueOf (whether explicit or implicit) should be used if identity is not required. Do you really need explicit Boolean.valueOf in, say, GSSManagerImpl, instead of relying on autoboxing? That said, your benchmark is not correct. At very least, you have to use explicit BlackHoles to avoid DCE [1][2]. This is how you do it: @State(Scope.Thread) @OutputTimeUnit(TimeUnit.SECONDS) public class BooleanBenchmark { @Param(100) private int size; private ListString booleanString; private boolean[] booleans; @Setup public void s() { booleans = new boolean[size]; booleanString = new ArrayListString(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(BlackHole bh) { for (boolean b : booleans) { Boolean result = b; bh.consume(result); } } @GenerateMicroBenchmark public void valueOfString(BlackHole bh) { for (String b : booleanString) { Boolean result = Boolean.valueOf(b); bh.consume(result); } } @GenerateMicroBenchmark public void newInstanceBoolean(BlackHole bh) { for (boolean b : booleans) { Boolean result = new Boolean(b); bh.consume(result); } } @GenerateMicroBenchmark public void newInstanceString(BlackHole bh) { for (String b : booleanString) { Boolean result = new Boolean(b); bh.consume(result); } } } Thanks, -Aleksey. [1] http://hg.openjdk.java.net/code-tools/jmh/file/75f8b23444f6/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_08_DeadCode.java [2] http://hg.openjdk.java.net/code-tools/jmh/file/75f8b23444f6/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_09_Blackholes.java -- 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
Re: Boolean valueOf instead of new Boolean
Hi Otávio, it would be nice, if you would not modify the classes sun.reflect.UnsafeXXXFieldAccessorImpl. This classes should be changed as a part of the fix for the issue JDK-5043030. The patch for this issue is already in work. Best regards, Andrej Golovnin On 24.05.2014, at 16:34, Otávio Gonçalves de Santana otavioj...@java.net wrote: 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 errorUnits m.BooleanBenchmark.newInstanceBooleanthrpt20 49801.326 369.897 ops/s m.BooleanBenchmark.newInstanceString thrpt20 365.080 27.537ops/s m.BooleanBenchmark.valueOfBoolean thrpt20764906233.316 9623009.653 ops/s m.BooleanBenchmark.valueOfString thrpt20 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 ListString 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 boolean.diff
Re: Boolean valueOf instead of new Boolean
Really Happy to hear that. Done. On Sat, May 24, 2014 at 5:10 PM, Andrej Golovnin andrej.golov...@gmail.comwrote: Hi Otávio, it would be nice, if you would not modify the classes sun.reflect.UnsafeXXXFieldAccessorImpl. This classes should be changed as a part of the fix for the issue JDK-5043030. The patch for this issue is already in work. Best regards, Andrej Golovnin On 24.05.2014, at 16:34, Otávio Gonçalves de Santana otavioj...@java.net wrote: 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 errorUnits m.BooleanBenchmark.newInstanceBooleanthrpt20 49801.326 369.897 ops/s m.BooleanBenchmark.newInstanceString thrpt20 365.080 27.537ops/s m.BooleanBenchmark.valueOfBoolean thrpt20 764906233.316 9623009.653 ops/s m.BooleanBenchmark.valueOfString thrpt20 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 ListString 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 boolean.diff -- 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.javaThu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/java/net/Socket.javaSat 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.javaThu May 22 12:54:02 2014 -0700 +++ b/src/share/classes/sun/font/SunFontManager.javaSat May 24 10:55:43 2014 -0300 @@ -2871,8 +2871,7 @@ new java.security.PrivilegedActionObject() { 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