¿Es costoso usar bloques try-catch incluso si nunca se lanza una excepción?


Sabemos que es caro capturar excepciones. Pero, ¿también es caro usar un bloque try-catch en Java incluso si nunca se lanza una excepción?

Encontré la pregunta/respuesta de desbordamiento de pila ¿Por qué los bloques try son caros?, pero es para .NET.

Author: Community, 0000-00-00

1 answers

try casi no tiene ningún gasto en absoluto. En lugar de hacer el trabajo de configurar try en tiempo de ejecución, los metadatos del código se estructuran en tiempo de compilación de tal manera que cuando se lanza una excepción, ahora hace una operación relativamente costosa de subir la pila y ver si existen bloques try que atrapen esta excepción. Desde la perspectiva de un laico, try también puede ser libre. En realidad, está lanzando la excepción que le cuesta , pero a menos que esté lanzando cientos o miles de excepciones, usted todavía no notará el costo.


try tiene algunos costos menores asociados con él. Java no puede realizar algunas optimizaciones de código en un bloque try que de otro modo haría. Por ejemplo, Java a menudo reorganiza las instrucciones en un método para que se ejecute más rápido, pero Java también necesita garantizar que si se lanza una excepción, la ejecución del método se observe como si sus sentencias, tal como están escritas en el código fuente, se ejecutaran en orden hasta alguna línea.

Porque en un bloque try se puede lanzar una excepción (en cualquier línea del bloque try! Algunas excepciones se lanzan de forma asíncrona, como llamando a stop en un hilo (que está en desuso), e incluso además de que OutOfMemoryError puede ocurrir casi en cualquier lugar) y, sin embargo, se puede capturar y el código continúa ejecutándose después en el mismo método, es más difícil razonar sobre las optimizaciones que se pueden hacer, por lo que es menos probable que ocurran. (Alguien tendría que programar el compilador para hacerlas, razón sobre y garantizar la corrección, etc. Sería un gran dolor para algo destinado a ser 'excepcional' ) Pero de nuevo, en la práctica no notarás cosas como esta.

 169
Author: Patashu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-08 23:36:05