GC是Garbage Collection(垃圾回收)/Garbage Collector(垃圾回收器)的簡稱,即JVM(Java Virtual Machine)的垃圾回收機制。
當在runtime(執行期間)產生一個新物件時,該物件會被存放在Heap區,而JVM會持續監控heap memory中物件的使用狀況。當一個物件不被使用時,也就是物件不被參照的時候將會被排入GC來回收記憶體空間。
GC最大的好處就是不用再由工程師自己在程式中處理記憶體的配置問題,完全交由JVM的Garbage Collector自動管理,而傳統的C語言則是要工程師自行手動操作記憶體的配置。
所以GC就是一個記憶體自動管理器,會進行以下操作。
- 分派作業系統的記憶體或返回記憶體給作業系統。
- 給予應用程式需要的記憶體。
- 決定有哪些記憶體仍被應用程式使用。
- 收回應用程式未使用的記憶體。
如果執行計算時所需使用的heap記憶體超過GC所能回收的記憶體,簡單說就是heap記憶體不足的情況時,系統會拋出Exception in thread "main" java.lang.OutOfMemoryError : Java heap space
錯誤
例如下面的程式會在main方法中建立一個超出heap空間的大小,所以會產生上述錯誤。
public class Main {
public static void main(String[] args) {
Integer[] array = new Integer[1000000 * 1000000];
}
}
沒有留言:
張貼留言