que pubg exceptions ejemplo java exception throwable

pubg - Gastos generales asociados con Exception vs Throwable en Java



throwable pubg (8)

Con la compilación de JIT, en realidad todavía no es el caso de que se escuche mucho al lanzar una Exception en Java. Pero lanzar un Throwable no es muy diferente, ya que también obtendrás un rastro de pila allí.

Si está interesado, hay un documento muy interesante llamado "Manejo eficiente de excepciones Java en compilación justo a tiempo" ( link ). No es una lectura ligera, pero bastante informativa.

Lo sé

throw new Exception();

tiene una sobrecarga bastante grande, ya que crea un stackTrace completo, etc.
Hace

throw new Throwable();

presentar el mismo problema? ¿Se hereda este comportamiento, o arrojar un Throwable tiene una sobrecarga (o no) más pequeña?

EDITAR
Desde el punto de vista de un analista , un usuario que inserta una contraseña incorrecta es una excepción al orden de ejecución normal de un programa. Entonces si tengo:

public Session newSession() { validate_user_and_password(); }

arrojar una UserNotValidException sonaría correctamente desde el punto de vista de un analista .
Devolver null o 0 simplemente suena incorrecto si tu código tiene una abstracción bastante buena. Solo quería saber si realmente podría implementar esto en el código, o si tendría que dejarlo a la teoría.

Hay una buena diferencia entre la excepción del punto de vista de programación y la excepción del punto de vista del analista.

Nota: He dado un ejemplo muy simple y tonto, este no es mi caso.
Nota 2: Sé que devolver null sería lo normal, pero se me exige que tenga el código OO correctamente resumido y, personalmente, no veo ningún daño en esto.


No, necesitas tu propia subclase para evitar ese efecto.

Exception ex = new Exception() { @Override public Throwable fillInStackTrace() { return this; // and do nothing else } };

Esto crea una instancia de excepción que no llenará el seguimiento de la pila (la creación de excepciones delega a fillInStackTrace para llenar realmente el seguimiento de la pila) y por lo tanto es barato de crear.


Nunca deberías tirar o atrapar a Throwable. El alcance de la excepción es demasiado grande.

Como se indicó anteriormente, las excepciones deben usarse solo cuando sea necesario, es decir: en circunstancias excepcionales y deben ser específicas a la situación que las engendró. Aparte de eso, capturar un Throwable implica una serie de excepciones, como OutOfMemoryException . Un error de esta magnitud no se puede recuperar de (fácilmente) y no debe ser manejado por el desarrollador.


Puede ver el código fuente de las dos clases para ver que Exception no hace nada más allá de exponer los mismos constructores como Throwable . Toda la carne, y por lo tanto arriba, vive en Throwable .

Incluso si Exception introdujo algo de sobrecarga adicional, sería una sobre-optimización clara para usar Throwable lugar. Use la herramienta adecuada para el trabajo, no coopte la herramienta equivocada solo porque es más liviana.


Throwable es la clase de excepción para padres. por lo tanto, la Exception class se hereda de Throwable .


Throwable también crea una stacktrace cuando se crea. De los documentos de Java para Throwable :

throwable contiene una instantánea de la pila de ejecución de su subproceso en el momento en que se creó.

Por lo tanto, en términos de sobrecarga con respecto a la creación de un stacktrace, no debería haber diferencia entre Exception y Throwable .

Si está utilizando excepciones para "eventos excepcionales" (como debería ser), entonces no debería preocuparse demasiado por la sobrecarga de una pila. Un evento excepcional ocurre raramente en el código de ejecución. Por lo tanto, las excepciones no deberían afectar el rendimiento del código normal de ninguna manera significativa.


java.lang.Exception extiende java.lang.Throwable , por lo que es la misma sobrecarga. Desde el Javadoc :

La clase Throwable es la superclase de todos los errores y excepciones en el lenguaje Java. Solo los objetos que son instancias de esta clase (o una de sus subclases) son lanzados por la Máquina Virtual de Java o pueden ser lanzados por la declaración Java throw. De forma similar, solo esta clase o una de sus subclases puede ser el tipo de argumento en una cláusula catch.

Las instancias de dos subclases, Error y Excepción, se usan convencionalmente para indicar que se han producido situaciones excepcionales. Normalmente, estas instancias se crean recientemente en el contexto de la situación excepcional para incluir información relevante (como datos de seguimiento de pila).


Excepción de Java

Como @mangoDrunk dijo: "Throwable es la superclase de excepción y error".