Sự khác biệt giữa ARC (automatic reference counting) và GC (garbage collection) là gì?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
67 lượt xem
Swift senior
  • ARC dựa vào compile-time các đối tượng "được tham chiếu" giúp nó hoạt động hiệu quả trong môi trường chế độ năng lượng thấp (Thiết bị di động).
    • ARC đưa một mã vào tệp thực thi để được thực thi "tự động" trên các đối tượng không được sử dụng tùy thuộc vào số lượng tham chiếu của chúng.
    • Ưu điểm:
      • Sự phá hủy theo thời gian thực, xác định các đối tượng khi chúng không được sử dụng.
      • Không xử lý nền.
    • Nhược điểm:
      • ARC không thể tự động xử lý các chu kỳ lưu giữ.
  • GC dựa trên runtime dựa trên các đối tượng "có thể truy cập", giúp nó hoạt động hiệu quả trong môi trường đa luồng.
    • GC hoạt động trong runtime vì nó sẽ phát hiện các biểu đồ đối tượng không sử dụng (sẽ loại bỏ các chu kỳ giữ lại) và loại bỏ chúng trong khoảng thời gian không xác định.
    • Ưu điểm:
      • GC có thể xóa toàn bộ đồ thị đối tượng, bao gồm cả các chu kỳ giữ lại (retain cycles).
      • GC tiến hành ở chế độ nền, do đó, công việc quản lý bộ nhớ được thực hiện ít hơn như một phần của quy trình ứng dụng thông thường.
    • Nhược điểm:
      • Bởi vì GC xảy ra trong nền, khung thời gian chính xác cho các bản phát hành đối tượng không được xác định.
      • Khi GC xảy ra, các luồng khác trong ứng dụng có thể bị tạm dừng.
{{login.error}}