|
|
1
0
好吧,您可以通过更改以下代码来避免双重检查锁定:
对此:
我打赌对性能的影响会很小。 |
|
|
2
0
你确定要优化这个吗?你有没有分析过运行中的代码,发现单个锁太贵了? |
|
|
3
0
|
|
|
4
0
考虑到您在代码中对性能非常关键的部分使用了这个方法,我建议您放弃延迟初始化的想法,因为它需要为每次访问一个系数执行几个额外的比较。 相反,我要求库的用户手动指定初始化时需要多少个系数。或者,我会预计算比用户可能需要的更多的数据—您可以将n<1000的所有nCk放入1 MB内存中。 附言:我可以建议你用递归公式来计算系数吗?
这没什么关系,但你需要的时候为什么要用复杂的公式呢 Pascals Triangle ? |
|
|
5
0
|
|
|
6
0
我只是让它不再是静态的。如果线程需要获取nCr值,它将创建一个新的Coefficient对象并保留它。 |
|
|
7
0
原来的代码有太多的竞争条件。对于初学者来说,您不能更新非易失性nCr\u arr,希望双重检查习惯用法能够工作。 声明为volatile完全违背了缓存的目的。正确的代码不应该使用sync,而应该使用CAS。 CHM在这里也是一个非常糟糕的选择(CHM的伸缩性也不好)。(同样,只要key不是valueOf工作原理的很好的b/c,它就不能被hotspot正确内联,因为它并不总是创建对象,final value字段也没有帮助) 干杯 |