複製演算法將記憶體劃分為大小相等的兩塊:活動區與空閒區。分配時僅使用活動區;當活動區耗盡,暫停程式(Stop-the-World),啟動 GC 執行緒,將存活物件按順序複製至空閒區,並更新引用地址。複製完成後,兩區角色互換,原活動區一次性清空,實現記憶體整理與回收。


結論:複製演算法僅適用於存活率極低的場景(如新生代)。
演算法分兩階段:



| 指標 | 複製 | 標記-整理 | 標記-清除 |
|---|---|---|---|
| 執行效率 | 最高 | 中等 | 最低 |
| 記憶體整齊度 | 最好 | 最好 | 差(碎片多) |
| 記憶體利用率 | 50% | 100% | 100% |
標記-清除雖較落後,但作為基礎孕育了後兩者。實際工程中,沒有完美算法,只有最適合場景的算法——這正是分代收集誕生的動力。
理解三大演算法的權衡,才能看懂為何 JVM 要按物件年齡分代處理。下一章將揭曉「神級算法」——分代收集算法的完整邏輯。
作者:zuoxiaolong(左潇龍)
出處:博客園左潇龍的技術博客