java randomuuid有没有{},java – 为什么对UUID.randomUUID()的初始调用会变慢?

给定以下代码片段,它生成一个UUID.randomUUID(),我得到以下性能结果(以毫秒为单位):

public static void main(String[] args) {

long tmp = System.currentTimeMillis();

UUID.randomUUID();

tmp = printDiff(tmp);

UUID.randomUUID();

tmp = printDiff(tmp);

UUID.randomUUID();

tmp = printDiff(tmp);

UUID.randomUUID();

tmp = printDiff(tmp);

}

private static long printDiff(final long previousTimestamp) {

long tmp = System.currentTimeMillis();

System.out.printf("%s%n", tmp - previousTimestamp);

return tmp;

}

结果:

971

6

0

0

JDK:1.8

操作系统:Windows 7

为什么只有初始通话需要这么长时间? (将近1秒!)

解决方法:

这是一次完成SecureRandom的初始化:

//from the source code of randomUUID

private static class Holder {

static final SecureRandom numberGenerator = new SecureRandom();

}

但这不是全部.那些零应该真的跳到你的脸上.因此操作耗时0毫秒;这是否意味着他们减少了?像几纳秒或你做错了什么?

有一个适当的工具来衡量这些东西,称为jmh.

@BenchmarkMode({ Mode.AverageTime, Mode.SingleShotTime })

@OutputTimeUnit(TimeUnit.MILLISECONDS)

@Warmup(iterations = 2, time = 2, timeUnit = TimeUnit.SECONDS)

@Measurement(iterations = 2, time = 2, timeUnit = TimeUnit.SECONDS)

@State(Scope.Benchmark)

public class UUIDRandom {

public static void main(String[] args) throws RunnerException {

Options opt = new OptionsBuilder().include(UUIDRandom.class.getSimpleName()).build();

new Runner(opt).run();

}

@Benchmark

@Fork(1)

public UUID random() {

return UUID.randomUUID();

}

}

输出说:

Benchmark Mode Cnt Score Error Units

UUIDRandom.random avgt 2 0.002 ms/op

UUIDRandom.random ss 2 0.094 ms/op

事实上,单次射击时间远远低于平均值.

标签:java,performance,uuid

来源: https://codeday.me/bug/20190727/1552951.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值