Boolean valueOf instead of new Boolean
Andrej Golovnin
andrej.golovnin at gmail.com
Sat May 24 20:10:57 UTC 2014
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 <otaviojava at 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 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
> <boolean.diff>
More information about the core-libs-dev
mailing list