java - lists - ¿Existe algún riesgo de rendimiento para Collections.unmodifiableList?
lists java (3)
Si el JIT integra las funciones, no. Si no es así, entonces sí, se producirá un ligero impacto en el rendimiento, pero es probable que no puedas notarlo a menos que tengas un bucle muy cerrado.
Es probable que integre la función, a menos que compile para la depuración.
Sugerí que se devolviera Collections.unmodifiableList () en lugar de devolver directamente una variable miembro, y a mi colega le preocupa que haya un impacto en el rendimiento. Por supuesto, la mejor respuesta es medirlo, y podemos hacerlo, pero me gustaría conocer sus experiencias y cualquier referencia, a favor o en contra.
Si observa la implementación, verá que Collections.unmodifiable es solo una envoltura delgada alrededor de la colección real que produce una excepción para todos los métodos de eliminación / adición en lugar de reenviarla. Por lo tanto, no hay un impacto de rendimiento (el JIT incorporará la llamada de reenvío).
Así que sí, absolutamente debería devolver una colección no modificable en lugar de la original la mayoría de las veces, mucho mejor práctica de codificación.
No. Al menos, la implementación de OpenJDK literalmente "reemplaza" los métodos de modificación con UnsupportedOperationException
s, el resto agrega un nivel de direccionamiento indirecto, que debería ser optimizado por la compilación VM (y aún así, un nivel de direccionamiento indirecto no sería costoso).
Si desea devolver una lista que no se puede modificar, cualquier impacto en el rendimiento palidecerá en comparación con la pérdida de corrección, no lo evitaría solo por el rendimiento, y ciertamente no lo evitaría si fuera lo que necesita.