是否值得汇总byte []和char []数组,或者只是创建它更好

mP.*_*mP. 7 java performance

我的代码执行了大量的输入/输出,这通常涉及创建临时数组来保存某些大小的字节或字符 - 我经常使用4096.我开始怀疑 - 没有实际测试 - 来验证它是否会更好地集合这些数组.我的代码将改为这样的东西

take array from pool
try {
   read from one inputStream
   write to another outputstream using array
} finally {
   return array to pool
}
Run Code Online (Sandbox Code Playgroud)
  • 它更快或者只是用4096创建一个字节,这意味着需要一些工作来在堆上分配mem,清除4096字节等.
  • 一个池似乎更简单,它可能只是从列表中检查列表并返回数组.

更新我写了一个小程序做了两件事,创建了数组并使用了apache commons池.两者都循环了很多次(100*100*100)并创建/获取,填充数组,然后释放.我在开始时添加了一些热身jit并忽略了那些结果.每次运行都会在创建和池形式中运行十几次,在两者之间交替.

池和创建表单之间没有什么区别.但是,如果我向一个实例返回池中的apache commons池触发的回调中添加了一个clear数组,那么该池就会比创建的表单慢得多.

Ton*_*nis 6

在演示性能问题之前,我不会实现池化.


mP.*_*mP. 1

这并不是一个真正的答案,但如果您想使用数组池而不是每次需要数组时创建数组,则需要考虑一些重要的要点。

  • 创建数组与元素数量成正比。
  • 获取数组并将其释放回池中需要一些固定成本。
  • 如果数组大于 4096 个元素,则池的开销小于创建成本。
  • 如果清除内容很重要,那么创建数组比清除数组便宜。
  • 如果数组中可能出现敏感数据,则不应共享数组,因为无法保证返回数组的代码仍保留引用。