为什么ja20性能不上.NET8还有人在用?
作者:卡卷网发布时间:2025-01-10 19:07浏览数量:95次评论数量:0次
你甚至根本不知道你自己在测什么,new一个大小为1000,000,000的数组出来然后只生成一个随机字节,unsafe用的也很迷惑,很难理解你想干什么。
我重写了:
C#
Ja:
在运行前进行了十次循环预热后,同样生成十亿长度的随机数组,.Net8Preview在我的上所用的时间为1965ms,而Ja20是801ms,所以相对而言.Net的老随机生成算法在生成速度方面不如Ja的Random
,不过这也代表不了什么,因为伪随机数生成器的指标也不止一个生成性能。
从.Net6开始,未指定种子的Random
会使用Xoshiro256**算法来生成随机数,而Ja也在Ja17中引入了新的RandomGenerator
API来指定不同的随机数生成器,可以这样得到一个基于Xoshiro256**的随机数生成器:
双方同样使用Xoshiro256**算法再进行以上时,.Net8Preview在我机器上花了86ms,而Ja20是327ms,实现方面的性能差距确实存在,这个主要原因是.Net为Xoshiro256**的Nextytes
单做了实现,而Ja20是直接用的RandomGenerator
的默认实现,这个默认实现也很糙,因此造成了差距。
前段时间我在OpenJDK这边开了一个PR来优化RandomGenerator
的默认实现:
用我优化后的分支再进行花了160ms,速度快了一倍多,不过想和.Net一样快那就要给Xoshiro256**算法单实现nextytes
方法了,如果我观察到这个方法的性能确实非常重要的话,我也会在这方面再进一步做些工作。
按题主评论区那样单个nextInt不预热这样测的话,.Net8Preview性能大概在JDK20和GraalVMforJDK20JIT模式之间,也算符合预期,有时间的话我再看看Ja这边的实现有没有可优化的地方。
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
- 上一篇:怎样下载歌曲到U盘上?
- 下一篇:请问什么叫js逆向?
你 发表评论:
欢迎