【发布时间】:2011-05-27 00:14:39
【问题描述】:
我正在查看一个配置文件,其中一个 CPU 热点是一个包含克隆最终静态 int[] 的函数。你可能会问,“为什么?”调用者使用结果作为散列过程的起点。
换句话说,代码需要做(逻辑上):
- 创建一个新数组
- 获取哈希种子(与数组大小一样多)
- 将值放入根据哈希种子计算的新数组中。这是一个迭代 算法,因此让种子从数组开始是有利的 - 因此从种子数组的克隆开始的想法。
在我放弃或开始编写微基准之前,我发布这个问题以防有人对 clone() 与 Arrays.copyOf 与 new 和 arraycopy 的底层内容有任何特殊的了解。
【问题讨论】:
-
我想我在这里遗漏了一些东西,但是如果它是原始的、最终的和静态的,为什么还需要克隆?
-
当前代码是什么样的?这也可能是 CPU 热点,因为您的程序经常调用它,并不一定意味着这部分代码是瓶颈。如果您发现 CPU 将 N% 的时间花在特定代码上,则可能是问题的最佳解决方案需要 CPU 将 N% 的时间花在此特定代码上。
-
@Casey:没有什么能阻止人们改变数组中整数的值。
-
@Casey:
final并不意味着数组变得不可变。这只是意味着您不能让该字段指向另一个不同的int[]数组。 -
你在单位时间内做了多少个克隆?有多少线程?你的 int 数组有多长?
标签: java arrays performance