On 03/11/2014 06:10 PM, Brian Burkhalter wrote:
Sergey,

On Mar 11, 2014, at 1:18 AM, Sergey Kuksenko wrote:

Could you share your benchmarks?
Of course. Please see:

benchmark source:       
http://cr.openjdk.java.net/~bpb/6375303/Bench6375303.java

public class Bench6375303 {
*     static final Random rnd = ThreadLocalRandom.current();*
    static final BigDecimal BIG_D = new BigDecimal(new BigInteger(512, rnd));
    static final String BIG_D_STRING = BIG_D.toString();

    @GenerateMicroBenchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.NANOSECONDS)
    public void testFirstToString(BlackHole bh) {
        BigDecimal bigD = new BigDecimal(new BigInteger(512,*rnd*));
        bh.consume(bigD.toString());
    }

    @GenerateMicroBenchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.NANOSECONDS)
    public void testToString(BlackHole bh) {
        bh.consume(BIG_D.toString());
    }
}


Huh! This is a ThreadLocalRandom anti-pattern. Thou should not use a ThreadLocalRandom instance in a thread that did not obtain it via a call to ThreadLocalRandom.current()...

You could create a new BigInteger(512, *rnd*) in the static initializer and use it to create new BigDecima(bigInteger) in testFirstToStrin.

*
Regards, Peter

*

benchmark results:      
http://cr.openjdk.java.net/~bpb/6375303/6375303-bench.html

Let us know should you find anything amiss.

Thanks,

Brian

Reply via email to