程序語言發展的歷史上,Lisp是第一門使用內存動態分配和垃圾收集技術的語言。
Java虛擬機的垃圾收集器(GC)需要完成的三件事: 1. 哪些內存需要回收 2. 什麼時候回收 3. 如何回收
判斷對象生命週期的兩種算法:
1. 引用計數算法: 實現簡單,使用案例有:COM, Python, ObjectC。 但是Java虛擬機沒有使用此算法,最主要是因爲它很難解決對象之間的相互循環引用的問題。
2. 根搜索算法(GC Roots) : 主流的商業程序語言,例如Java, C#,Lisp都是採用此種算法。
Java虛擬機判斷一個類是否是無用類:
1. 該類所有的實例都已經被回收,Java堆中不存在該類的任何實例。
2. 加載該類的ClassLoader已經被回收
3. 該類對應的java.lang.class對象沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法