關於java中的逃逸分析
阿新 • • 發佈:2021-12-16
物件一般都是在堆上生成的,其實這也不是絕對的,特例就是“逃逸分析”。
• 程式碼
/** * 物件一般都是在堆上生成的,其實這也不是絕對的,特例就是“逃逸分析”。 * 逃逸分析(jdk1.6+):jvm在分析程式碼之後,發現一個物件在宣告之後,只在其所在的函式內呼叫,那麼他就會將這個物件在棧上申請空間,而不是在堆上。 * 因為在棧上申請的物件,函式執行完畢後就會自動清理,這樣就大大減輕了GC的壓力! */ public class Test2 { public static void main(String[] args) { while (true) { Integer integer= new Integer(111111); //這裡數值要大於127或小於-128,避免快取 } } }
關閉逃逸分析: IDEA設定啟動jvm引數 : -XX:-DoEscapeAnalysis
• 小結:
逃逸分析是分析了物件只是在當前函式範圍內使用,因而改為在棧上申請空間。而棧是函式執行完,立即清理的,所以不需要等到GC了,
大大緩解了GC的壓力。
當然如果不是隻在當前函式範圍內用到的物件不行!