Hi Otávio,

I think that makes sense, It looks like It's the only place in the code where we have that.

Cheers

Bruno Baptista
http://twitter.com/brunobat_


On 20/11/18 12:03, Otávio Gonçalves de Santana wrote:
While I was studying the code, I found at SingletonEjbObjectHandler.java
that they are creating a new Boolean instance instead of using the
Boolean.valueOf. method.
The boolean wrapper has a singleton instance to both true and false.
However, it will use when the code uses the Boolean.valueOf method.

Beyond the waste of memory, because they’re creating a new boolean instance
every time, it will be slower than the valueOf method.

@Warmup(iterations = 5, time = 1, timeUnit =
TimeUnit.SECONDS)@Measurement(iterations = 20, time = 1, timeUnit =
TimeUnit.SECONDS)@Fork(3)@BenchmarkMode(Mode.AverageTime)@OutputTimeUnit(TimeUnit.NANOSECONDS)@State(Scope.Thread)public
class FasterReflectionClientBenchmark {

     private ThreadLocalRandom random = ThreadLocalRandom.current();

     @Benchmark
     public Boolean newInstance() {
         return new Boolean(random.nextBoolean());
     }

     @Benchmark
     public Boolean valueOf() {
         return Boolean.valueOf(random.nextBoolean());
     }
}

Benchmark Mode Cnt Score Obs
valueOf avgt 60 5,048 —-
newInstance avgt 60 6,467 (20% slower)

ps: The equals method returns a primitive value if we keep without the
wrapper, it will automatically do a wrapper using the Boolean.valueOf.
PR created: https://github.com/apache/tomee/pull/206

Reply via email to