Fast Exceptions in Java

在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

相關文章
相關標籤/搜索