背景
在java开发中广泛使用SecureRandom,产生可靠随机数。但在大量产生随机数的场景下,性能会较低。
引起原因
SecureRandom产生下一个随机数的时候调用nextLong或者nextBytes,最终会调用SecureRandom的nextBytes。而nextBytes是一个同步的方法,在多线程使用时,可能会产生性能瓶颈。
解决方法
使用 -Djava.security.egd=file:/dev/./urandom 加快随机数产生
解决原理
/dev/random在产生大量随机数的时候比/dev/urandom慢,所以,建议在大量使用随机数的时候,将随机数发生器指定为/dev/./urandom。
hotspot需要使用配置项-Djava.security.egd=file:/dev/./urandom才能从urandom读取数据,如果是openjdk已经做了优化,直接从urandom读取数据。
网友评论