生命週期

變數範圍

全域變數

全域變數作用的範圍是在宣告以後,可橫跨不同Method中使用,更可因為設定可見度(public、protected)的不同,讓不同Class之間可以直接使用。

由於全域變數存活時間較長,甚至很容易引發None Thread Safe的問題,建議儘量別宣告為全域變數,讓變數存活的時間越短越好。

區域變數

在Method 的區塊宣告出來的變數,皆為區域變數,區域變數作用的範圍是在宣告以後,直到區域結束時系統自動清除。

運作時間

短時間運作

由主程式建立出來的子程式,在完成階段任務後,就會結束

長時間運作

在系統啟動後,會一直被不同程式使用,直到系統停止後才會消失的程式

長時間執行的程式,在使用全域變數時需要特別小心,很容易就會出現None Thread Safe 的問題,造成非預期的錯誤。

Web 系統中,以下幾種常見的技術皆屬於長時間運作:

  1. Servlet、JSP

  2. Filter

  3. Listener

  4. Connection Pool

  5. Singleton Object

範例比較

在同樣的運作邏輯,使用全域變數與區域變數來開發程式後,何種能夠提供較好的結果? 這邊提供一個簡單的範例來比較 (JVM 記憶體上限皆為64MB)

GlobalScope.java 全域變數

全域變數的範例在執行7000次之後就出現異常訊息: java.lang.OutOfMemoryError: GC overhead limit exceeded

LocalScope.java 區域變數

區域變數的範例可以執行超過100萬次

Last updated