在Java中,異常還有一個頗有用的用途,就是終止方法的執行,在Play framework這個牛B的框架中,mvc部分就是使用拋出異常的方式終止方法的執行,最終達到response的目的。html
但咱們都知道JVM在構造異常對象的時候是很是耗時的,據有些蛋疼的人測試,構造一個異常對象要比構造正常的java對象更加的耗費時間(我沒有測試過)。java
還好,如今咱們能夠使用Fast Exceptions!在Play framework最新的版本中就使用了此種Exception。mvc
其實木有什麼神祕的,只是override java異常的 public Throwable fillInStackTrace()方法便可:框架
/** * Since we override this method, no stacktrace is generated - much faster * @return always null */ public Throwable fillInStackTrace() { return null; }
關於Fash Excepiton的測試:ide
http://www.javaspecialists.eu/archive/Issue129.html性能
異常性能是很差,根本緣由在於:
異常基類Throwable.java的public synchronized native Throwable fillInStackTrace()方法
方法介紹:
Fills in the execution stack trace. This method records within this Throwable object information about the current state of the stack frames for the current thread.
性能開銷在於:
1. 是一個synchronized方法(主因)
2. 須要填充線程運行堆棧信息測試
複寫他就行了。this