Collections.unmodifiableList有任何性能风险吗?

Car*_*ter 23 java collections unmodifiable

我建议返回Collections.unmodifiableList()而不是直接返回一个成员变量,我的同事担心会有性能损失.当然,最好的答案是衡量它,我们可能会这样做 - 但我想知道你的经验和任何参考,赞成或反对.

Mar*_*iot 25

不.至少,OpenJDK实现字面上用UnsupportedOperationExceptions 代替"修改方法" ,其余部分增加了一个间接级别,这应该被编译器 VM 优化掉(即使如此,一个级别的间接也不会很昂贵).

如果你想返回一个无法修改的列表,那么与正确性的损失相比,任何性能影响都会变得苍白,我不会单独避免它的性能,如果它是你需要的话我肯定不会避免它.

  • 由VM(Hotspot)优化而不是Java编译器. (6认同)

Voo*_*Voo 7

如果你看一下实现,你会发现Collections.unmodifiable只是真实集合的一个瘦包装器,它会抛出所有删除/添加方法的异常,而不是转发它.所以没有任何性能损失(转发呼叫将由JIT内联).

所以是的,你绝对应该返回一个不可修改的集合,而不是大多数时候的原始集合 - 更好的编码实践.