逃逸分析(Escape Analysis)是目前Java虛擬機中比較前沿的優化技術。
例如:
1 2 3 4 5 6 | public static StringBuffer craeteStringBuffer(String s1, String s2) { StringBuffer sb = new StringBuffer(); sb.append(s1); sb.append(s2); return sb; } |
StringBuffer sb是一個方法內部變量,上述代碼中直接將sb返回,這樣這個StringBuffer有可能被其他方法所改變,這樣它的作用域就不只是在方法內部,雖然它是一個局部變量,稱其逃逸到了方法外部。
甚至還有可能被外部線程訪問到,譬如賦值給類變量或可以在其他線程中訪問的實例變量,稱爲線程逃逸。
上述代碼如果想要StringBuffer sb不逃出方法,可以這樣寫:
1 2 3 4 5 6 | public static String createStringBuffer(String s1, String s2) { StringBuffer sb = new StringBuffer(); sb.append(s1); sb.append(s2); return sb.toString(); } |
不直接返回 StringBuffer,那麼StringBuffer將不會逃逸出方法。
參考:http://www.importnew.com/23150.html