16. Example p p Live object Marked object Garbage Free list r1 Free list r1 Free list r1
17. Basic Algorithm New (A)= if free_list is empty mark_sweep() if free_list is empty return (“out-of-memory”) pointer = allocate(A) return (pointer) mark_sweep ()= for Ptr in Roots mark(Ptr) sweep() mark (Obj)= if mark_bit(Obj) == unmarked mark_bit(Obj)=marked for C in Children(Obj) mark(C) Sweep ()= p = Heap_bottom while (p < Heap_top) if (mark_bit(p) == unmarked) then free(p) else mark_bit(p) = unmarked; p=p+size(p)
Ưu điểm: Ko cần cấp thêm vùng nhớ để lưu trữ trường count field Các object ko cần di chuyển trong quá trình GC Loại bỏ được rác trong trường hợp có tham chiếu vòng (cyclic structures) Nhược điểm: Giới hạn giá trị lớn nhất có thể của ô nhớ (integer) Tăng khả năng làm phân mảnh vùng nhớ Chương trình phải tạm dừng khi GC thực thi Giai đoạn sweep tốn chi phí cao(thời gian)
Ưu điểm: Giảm khả năng phân mảnh vùng nhớ heap. Thời gian thực hiện công việc thì tỉ lệ với các live object Có thể xử lý được rác chứa các tham chiếu vòng Không tốn bộ nhớ để lưu trường count field Nhược điểm: Vùng nhớ dùng cho chương trình bị chia đôi(fromspace – tospace) Các object phải di chuyển trong vùng nhớ trong suốt quá trình thu gom rác, do vậy các tham chiếu đến các đối tượng cũng phải cập nhật. Chương trình phải tạm dừng khi bộ thu gom rác thực thi.