命令行参数-Djava.security.egd=file:/dev/./urandom的作用

背景

在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读取数据。

-Djava.security.egd=file:/dev/random( 这等于默认选项 )
默认算法: NativePRNG
提供程序: SecureRandom.NativePRNG算法来自:SUN

-Djava.security.egd=file:/dev/urandom
默认算法: NativePRNG
提供程序: SecureRandom.NativePRNG算法来自:SUN

-Djava.security.egd=file:/dev/./urandom
默认算法: DRBG
提供者: SecureRandom.DRBG算法来自:SUN


最后,/dev/urandom即使在使用现代OS时,用作随机源的问题仍然至关重要。

结论:

我建议继续使用-Djava.security.egd=file:/dev/./urandomJava 11以确保:

1. 无论使用什么平台(DRBG),都可以利用最强大的 SecureRandom 实现

2. 避免使代码意外阻塞(securerandom.source=file:/dev/urandom

声明: 转载请保留原文链接谢谢!
本站所有资源文章出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户擦亮眼睛自行鉴别,做一个有主见和判断力的用户。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
联系方式(#替换成@):adminlr###msn.cn

给TA打赏
共{{data.count}}人
人已打赏
技术

3 个腾讯开源的 GitHub 项目,足够惊艳!

2023-5-11 0:08:05

技术

百度网盘删除3个文件,仍可稳定使用CE破解限速

2023-5-12 11:02:42

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
有新私信 私信列表
搜索