1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tìm hiểu các kỹ thuật dọn rác nhớ (Gabage collection)

16 334 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Cấu trúc

  • A. Phần 1 – Giới thiệu

  • 1. Gabage collection là gì?

  • 2. Những nguyên tắc cơ bản

  • 3. Ưu nhược điểm của bộ dọn rác (GC)

  • 4. Một số kỹ thuật GC phổ biến

    • 4.1. Tracing Gabage Collection

    • 4.2. GC in Runtime Systems

  • B. Phần 2 - Bộ đếm tham chiếu

  • 2. Đếm tham chiếu

    • 2.1. Phương pháp ban đầu

  • C. Phần 3 – Đánh dấu và giải phóng rác

  • 3. Đánh dấu và giải phóng rác

    • 3.1. Các giải pháp truyền thống

    • 3.2. Đánh dấu các đối tượng rác

    • 3.3. Giải phóng bộ nhớ

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Viện Công Nghệ Thông Tin & Truyền Thông o0o BÁO CÁO TIỂU LUẬN NGUYÊN LÝ CÁC NGÔN NGỮ LẬP TRÌNH Đề bài: 05 Tìm hiểu kỹ thuật dọn rác nhớ (Gabage collection) Giảng viên: TS Nguyễn Hữu Đức Nhóm sinh viên thực hiện: STT Mã học viên Họ tên CB120113 Phạm Tất Thành (Trưởng nhóm) CB120116 Nguyễn Xuân Thịnh CB120097 Trần Văn Nậm Lớp: 12BCNTT2 Hà nội 2012 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác MỤC LỤC A Phần – Giới thiệu Gabage collection gì? .3 Những nguyên tắc 3 Ưu nhược điểm dọn rác (GC) Một số kỹ thuật GC phổ biến 4.1 Tracing Gabage Collection 4.2 GC in Runtime Systems B Phần - Bộ đếm tham chiếu .6 Đếm tham chiếu 2.1 Phương pháp ban đầu C Phần – Đánh dấu giải phóng rác 11 Đánh dấu giải phóng rác .11 3.1 Các giải pháp truyền thống 11 3.2 Đánh dấu đối tượng rác 11 3.3 Giải phóng nhớ 12 Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác TÌM HIỂU CÁC KỸ THUẬT DỌN RÁC NHỚ A Phần – Giới thiệu Gabage collection gì? Trong khoa học máy tính, GC dạng quản lý nhớ tự động GC giải phóng nhớ bị chiếm dụng biết hay đối tượng không sử dụng chương trình GC John McCarthy đưa vào năm 1959 để giải vấn đề ngôn ngữ Lisp GC thường mô tả đối lập với việc quản lý nhớ chủ động (manual), yêu cầu lập trình viên phải định đối tượng bị hủy để trả lại tài nguyên nhớ cho hệ thống Tài nguyên hệ thống có kết nối mạng, sở liệu, cửa sổ tương tác người dùng, tệp thường không xử lý GC Những nguyên tắc Tìm đối tượng liệu chương trình không truy cập tương lai Lấy lại tài nguyên sử dụng đối tượng Rất nhiều ngôn ngữ sử dụng GC (ví dụ: Java, C# hầu hết ngôn ngữ kịch bản) GC luôn kết hợp chặt chẽ với cấp phát nhớ GC thực theo chu trình định sắn, tài nguyên bị thiếu thực Ưu nhược điểm dọn rác (GC) Ưu điểm: GC giải phóng lập trình viên từ việc phải chủ động hủy, giải phóng nhớ Kết số lỗi loại bỏ giảm thiểu đáng kể: Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ • Đề: 05 Tìm hiểu kỹ thuật dọn rác Lỗi trỏ, phần nhớ giải phóng trỏ khác trỏ tới • Lỗi xảy chương trình cố gắng giải phóng vùng nhớ giải phóng chí cấp phát lần • Một số loại rò rỉ nhớ, chương trình không giải phóng nhớ bị chiếm đóng dẫn đến cạn kiệt tài nguyên • Một số lỗi khác giải GC có tác động an ninh Nhược điểm: • GC tiêu thụ tài nguyên máy tính việc đưa định giải phóng nhớ, chí lập trình viên biết thông tin Đây hình phạt cho việc không xác định, quản lý thời gian sống của đối tượng chương trình, dẫn đến giẩm hiệu suất chương trình Việc tương tác với nhớ phân cấp làm cho chi phí chấp nhận khó để dự đoán hay phát hiện, thử nghiệm thường xuyên • Thời điểm để GC hoặt động không đoán trước • Không xác định GC tương thích với RAII (bộ khởi tạo tài nguyên) Một số kỹ thuật GC phổ biến 4.1 Tracing Gabage Collection Là loại GC phổ biến Cơ chế hoạt động: Đầu tiên xác định đối tượng truy cập có khả truy cập, sau loại bỏ tất đối tượng lại Vậy đối tượng truy cập: Một đối tượng gọi truy cập tồn biến tham chiếu tới chương trình, trực tiếp thông qua tham chiếu từ đối tượng truy cập khác Chính xác hơn, đối tượng truy cập hai cách: Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ • Đề: 05 Tìm hiểu kỹ thuật dọn rác Giả sử tập đối tượng truy cập, gọi roots Nó bao gồm tất đối tượng tham chiếu từ đâu (các biến địa phương tham số hàm gọi) toàn • biến toàn cục Bất kỳ tham chiếu từ đối tượng truy cập, thân truy cập Có thể truy cập bao đóng bắc cầu Strong and Weak References • GC hủy đối tượng tham chiếu đến chúng Tuy nhiên vài chương trình yêu cầu Weak References, mà nên sử dụng lâu tốt đối tượng tồn tại, không nên kéo dài thời gian sống Một đối tượng bị hủy tham Strong References, chí có tồn số Weak References trỏ • đến Weak References không đơn trỏ trỏ tới đối tượng mà GC không quan tâm đến Thuật ngữ thường dành riêng cho đối tượng tham chiếu đặc biệt, mà an toàn đối tượng bị biến chúng hiệu lực đến giá trị an toàn Trong thực tế, Weak References chia thành loại nhỏ Ví dụ • Java Virtual machine cung cấp dạng Weak References: + Soft References + Phantom References + Regular weak References Microsoft.NET cung cấp dạng Weak References: + Namely long weak references + Soft weak references Cấu trúc liệu nghĩ để có tính theo dõi Weak Ví dụ, bảng băm Weak hữu ích, giống bảng băm thông thường, bảng băm weak trì mối liên hệ cặp đối tượng, nơi mà cặp hiểu chìa khóa giá trị Nhưng bảng băm không thực trì Strong references đối tượng Một động thái đặc biệt diễn khóa hay giá trị hay hai trở thành rác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác 4.2 GC in Runtime Systems Trong hệ thống thời gian thực, phải đáp ứng cho kiện thời gian ràng buộc, Bộ GC phải không dừng thực vài phút, vài giây chí mili giây tùy thuộc vào nhiệm vụ ứng dụng Bộ thu phân phối công việc cho phép ứng dụng chạy Nó thực xen kẽ với chương trình thực Loại GC gọi gia tăng nhớ Như biết, đếm tham chiếu dễ dàng sửa đổi để gia tăng Tuy nhiên hiệu không đủ nhiều trường hợp Do chép tạo thực gia tăng Sự khác chương trình chạy song song với thu gom phải thay đổi biểu đồ đối tượng truy cập thu gom làm việc phần đồ thị khác Cái mà xem điều chỉnh xử lý đồng thời cấu trúc liệu The Tricolor marking scheme Vấn đề đánh dấu song song mô tả với sơ đồ đánh dấu màu ảo Bộ theo dõi mô tả biểu đồ tịnh tiến đối tượng sống màu chúng Khởi tạo ban đầu, tất đối tượng có màu trắng, kết thúc trình sống, đối tượng nên đặt màu đen Trong lớp xử lý đánh dấu, màu thực trực tiếp đánh dấu bit Bit đối tượng truy cập là tập hợp B Phần - Bộ đếm tham chiếu Đếm tham chiếu 2.1 Phương pháp ban đầu Giống mô tả [Coll60] [Weiz63], trường thêm, gọi đếm tham chiếu, giới thiệu tới đối tượng, trường cho biết số lần đối tượng tham chiếu, trường phải cập nhật Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác trỏ đến đối tượng tạo bị hủy bỏ, đếm không đối tượng không hoạt động dọn Nếu cấu trúc toàn trường kiểm tra đếm tham chiếu (Hình Phân loại kỹ thuật dọn rác nhớ) Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác Việc giảm giá trị đối tượng tham chiếu.Thông thường, tham chiếu cấu trúc lớn giải phóng, tất tính toán tham chiếu đối tượng cấu trúc trở thành số không tất đối tượng thu hồi Theo lý thuyết, đếm tham chiếu phải đủ lớn để nắm giữ số tham chiếu nhiều số lượng ô nhớ Do đó, việc đếm phải lớn trỏ Ưu điểm kỹ thuật thời gian dọn rác nhớ phân phối không dừng lại việc thực chương trình cho số lượng đáng kể thời gian, hạn chế hệ thống thời gian thực tương tác Các ô không hoạt động lưu trữ ngăn xếp ngầm thực danh sách liên kết Bản thân ô trống lưu trữ trỏ Phân bố lại không thích hợp chuyển cải thiện toàn cấu trúc liệu Giữ danh sách rỗng đối tượng chưa xử lý phân phối thu hồi đệ quy Những lợi lớn khác phương pháp tính địa phương.Trong thuật toán khác quét toàn bộ nhớ, đếm tham chiếu làm việc với đối tượng địa phương.Trong hệ thống sử dụng nhớ ảo môi trường phân trang chí chạy máy tính gần cách sử dụng nhớ cache, việc sử dụng tính địa phương nhớ quan trọng Số lượng lớn lỗi trang gọi liệu cần thiết nhớ nhanh làm chậm đáng kể hệ thống (Tính bất lợi đối tượng sống không phân tán toàn bộ nhớ.) Tuy nhiên, phương pháp có số nhược điểm Đầu tiên, thêm không gian cần thiết cho nhiều máy tính chiếm số lượng đáng kể nhớ Thứ hai, việc cập nhật thường xuyên máy tính làm cho chi phí thời gian thực hiện, chi phí tỷ lệ thuận với số lượng công việc thực Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác chương trình chạy Thứ ba, phương pháp đòi lại cấu trúc vòng Cuối cùng, nhận xét đếm tham chiếu tập trung vào đối tượng trở thành rác nhớ phương pháp khác qua đồ thị đối tượng sống Các số liệu thống kê cho thấy số lượng đối tượng sống luôn đáng kể so với số lượng đối tượng rác nhớ Kích thước đếm nhỏ so với trỏ Sau số tham chiếu lưu trữ tối đa đạt được, đếm không tăng lên giảm đi.Trong trường hợp đó, đối tượng tham chiếu nhiều lần cải thiện chúng trở thành rác thải Tuy nhiên, số liệu thống kê cho thấy hầu hết đối tượng tham chiếu lần Thực tế đưa vào xem xét đếm tham chiếu, phương pháp đếm kích thức bit thực [Chi87] (xem [Ina90]) Nó lấy lại rác nhớ đối tượng tham chiếu Deutsch Bobrow sử dụng bảng băm cho hệ thống LISP để xử lý đối tượng tham chiếu có hiệu quả, xem Bob75, Deu76, [Coh81] Các chi phí thời gian bao gồm hai loại chi phí Một chi phí thường xuyên cập nhật đếm trỏ trỏ đến đối tượng tạo bị hủy bỏ Đối số qua thủ tục kích hoạt tạo biến ngắn ngủi, đặt ngăn xếp hệ thống Trong trường hợp này, số lượng đếm tham chiếu tăng lên giảm khoảng thời gian ngắn, chi phí loại bỏ cách xử lý đặc biệt biến địa phương Một chi phí khác loại bỏ Khi đối tượng lấy lại, thông thường, điều liên quan đến việc liên kết đối tượng giải phóng vào nhiều "danh sách trống” Bộ đếm tham chiếu phát "rác mạch vòng" số đối tượng tham chiếu với nhau, chúng truy cập chương Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác trình.Ví dụ, biểu đồ cấu trúc liệu với nút có chứa chu kỳ chứa trỏ quay lui đến chu kỳ chứa nút cha Xem hình 2, chu kỳ phức tạp hình thành việc sử dụng cấu trúc liệu lai kết hợp số cấu trúc liệu đơn giản chương trình tạo nhiều vòng Mặc dù, có số giải pháp để phục hồi cấu trúc vòng (xem ví dụ [Les92]), chúng thực không hiệu (Hình 2: Bài toán với cấu trúc vòng) Ngay kích thước đếm nhỏ đối tượng tham chiếu nhiều lần nhớ thời gian thực toàn chương trình Vì vậy, đếm tham chiếu dọn rác thường bao gồm loại dọn khác thực nhớ đầy phương pháp không đủ không gian rảnh Trong năm gần đây, chi phí đếm tham chiếu thất bại với cấu trúc tròn làm cho không hấp dẫn với hầu hết người thực hiện.Các phương pháp đánh dấu thu hồi thường hiệu đáng tin cậy Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 10 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác C Phần – Đánh dấu giải phóng rác Đánh dấu giải phóng rác 3.1 Các giải pháp truyền thống Thu dọn rác thực pha Pha đầu, đánh dấu đối tượng truy cập; Pha thứ hai, thực quét toàn bộ nhớ đốitượng đánh dấu tập hợp lại vùng nhớ liền 3.2 Đánh dấu đối tượng rác Có số đối tượng truy cập tức thời chương trình, biến toàn cục, biết địa phương ghi hệ thống Chúng gọi “tập gốc” chứa tham chiếu đến đối tượng nhớ Nếu cấu trúc liệu truy cập đến đối tượng khác tham chiếu qua trường cấu trúc liệu cho phép truy cập Thủ tục đánh dấu định nghĩa đệ quy sau: Proceduremark(p); { p is a reference, i.e a pointer to a data object } begin integeri; ifnot_marked(p) then begin mark_data(p); ifstructure(p) then begin fori := tonumber_of_fields(p) domark( field(p,i) ); end end endmark; Giải thích: - Hàm number_of_fields(p) tính số trường liệu cấu trúc liệu mà p (p tham chiếu tới đối tượng liệu) tham chiếu tới Các trường kiểm tra đệ quy Hàm field(p,i) thực cho tham chiếu tới trường liệu thứ i cấu trúc liệu tham chiếu p - Thủ tục cài đặt không đệ quy cách sử dụng ngăn xếp Các ô ngăn xếp trỏ tới tham chiếu cần kiểm tra Khi cấu trúc Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 11 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác liệu đánh dấu, trường liệu tham chiếu tới cấu trúc chưa đánh dấu đẩy vào ngăn xếp Thủ tục đánh dấu sử dụng tham chiếu đến đỉnh ngăn xếp –chứa “tập gốc” bắt đầu thực đánh dấu Thủ tục thực ngăn xếp rỗng Đây phương thức có tốc độ nhanh lý thuyết kích thước ngăn xếp phải tương ứng với kích thước nhớ Nếu nhớ chưa N cấu trúc tất chúng đếu truy cập từ phần tử thuộc “tập gốc”, kích thước ngăn xếp tăng lên gần N - Để trách vấn đề ngăn xếp cần kích thước lớn, Knuth sử dụng ngăn xếp có kích thước h cố định Knuth lưu tham chiếu theo kiểu vòng – tính số phần tử ngăn xếp phép mod h Khi số tham chiếu tính lớn h, lại bắt đầu lại từ số ghi đè lên thông tin trước Bởi vậy, ngăn xếp gọi lại h mục liệu truy cập gần không xử lý tới mục lại Tất nhiên, ngăn xếp rỗng trước toàn việc thực đánh dấu hoàn thành Khi điều xảy ra, nhớ quết từ địa thấp nhất, tìm kiếm đối tượng đánh dấu mà nội dung đối tượng tham chiếu tới đối tượng chưa đánh dấu Nếu đối tượng tìm thấy, việc đánh dấu tiếp tục trước tìm thấy lại thực ngăn xếp rỗng hoàn thành tác vụ Không phải toàn bộ nhớ quét qua thủ tục ghi tham chiếu bị - Tác vụ hoàn thành mà không sử dụng ngăn xếp Chú ý, lời gọi thủ tục đệ quy bao hàm việc sử dụng ngăn xếp không tường minh nhớ bị đầy trình thực đánh dấu 3.3 Giải phóng nhớ - Quét đối tượng liệu rác Phương thức đơn giản cho việc giải phóng đối tượng liệu kết hợp ô không đánh dấu vào hay nhiều danh sách đối tượng rác + Việc thực cách giữ danh sách cho đối tượng có kích thước phổ biến sử dụng chương trình Các danh sách gọi danh sách (H-list) Ngoài ra, danh sách đối tượng rác khác, M-list, ô đối tượng có kích thước khác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 12 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác xếp theo địa chúng Nếu thực điều này, ô thu hồi liên kết đến danh sách H-list M-list tương ứng + Các yêu cầu định vị nhớ thỏa mãn dựa vào H-list, danh sách không rỗng Nếu không ô nhớ phù hợp lấy từ M-list (nếu được) Nếu ô nhớ có kích thức lớn kích thước mong muốn, chia vào ô nhỏ không bắt buộc ô nhớ nhỏ phải liên kết tới danh sách đối tượng rác Nếu yêu cầu định vị nhớ không thỏa mãn, trước hết việc dồn ô thành khối thực để di chuyển ô nhớ từ H-list sang M-list sau kết hợp chúng sát lại với ô nhớ rác Nếu khối ô không đủ, dồn ô nhớ thực thực ô nhớrác + Các thuật toán quét có nhược điểm Thứ nhất, việc xử lý ô nhớ có kích thước khác nặng nề làm phân mảnh nhớ Thứ hai, chi phí tỉ lệ với kích thước toàn bộ nhớ tất đối tượng hoạt động phải đánh dấu tất rác phải thu dọn Vấn đề thứ đáng quan tâm phương pháp không di chuyển đối tượng – xem ưu điểm phương pháp việc thực không cần phải cập nhật lại trỏ - vậy, đối tượng định vị sau đặt rải rác với đối tượng trước Việc chèn đối tượng rải rác không phù hợp cho hệ thống sử dụng nhớ ảo + Tuy nhiên, vấn đề lúc có hại ta nghĩ Theo thống kê, đối tượng thường tạo cụm thường kích hoạt thời điểm Thuật toán thông minh sử dụng bit đánh dấu tăng tốc độ giải thuật quét Việc sử dụng phép ánh xạ bit để đánh dấu bít kiểm tra 32 bit với phép toán số nguyên 32 bit Khi đối tượng có khuynh hướng tồn lâu cụm, điều làm giảm đáng kể hàng số tỉ lệ chi phí kích thước nhớ Việc sử dụng phép ánh xạ bit làm giảm chi phí định vị nhớ cách cho phép định vị nhanh từ vùng chưa đánh dấu kề thay sử dụng danh sách đối tượng rác - Giải phóng đối tượng rác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 13 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ + Đề: 05 Tìm hiểu kỹ thuật dọn rác Các giải phóng liệu kiểu sliding quan trọng cài đặt của ngôn ngữ Prolog phần lớn liệu giải phóng sử dụng lại quay lui Tuy nhiên việc cài đặt hiệu yêu cầu thứ tự thời gian đối tượng không lẫn lộn + Haddon Waite đề xuất thu liệu kiểu sliding Họ thực lần quét toàn bộ nhớ (chú ý pha đánh dấu thực kĩ hơn) Mục tiêu lần quét thực thu hồi tạo bảng “break table” bảng sử dụng cho lần quét thứ để điều chỉnh lại tham chiếu “Break table” chứa địa khởi đầu kích thước “hole” – chuỗi ô nhớ chưa đánh dấu Việc xây dựng “break table” thực không cần thêm nhớ xây dựng “hole” Có thể chứng minh không gian sẵn có “hole” đủ để lưu “break table” Tuy nhiên, “break table” phải xử lý động, cuộn qua “hole” có liệu với liệu Kết thúc lần quét đối tượng hoạt động tập hợp vào cuối nhớ Bảng “break table” giữ phần nhớ giải phóng Bảng sau xếp để tăng tốc việc điều chỉnh trỏ lần quét thứ Việc điều chỉnh trỏ bao gồm việc kiểm tra trỏ, dùng “break table” (sử dụng tìm kiếm nhị phân bảng xếp) để tính vị trí ô liệu thay đổi trỏ cho phù hợp Giải thuật bị cho chậm việc sử dụng “hole” tìm kiếm nhị phân cho tham chiếm + Knuth đề xuất giải thuật thu hồi rác khác sử dụng tuyến tính (hoặc nhiều hơn) lần quét toàn bộ nhớ Trong lần quét “hole” liên kết tạo thành danh sách đối tượng rác Hai trường rành riêng “hole” để lưu kích thước trỏ để trỏ tới “hole” (Lần quét kết hợp “hole” thành “hole” đơn, lớn “hole” Lần quét thứ điều chỉnh tham chiếu cách xếp lại trỏ tính toán địa Với trỏ p, thu rác tìm “hole” thứ i, có địa ai-1< p < Trong lần quét thứ 3, thu rác quét di chuyển ô nhớ truy cập vào vùng để thực giải phóng rác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 14 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác + Morris đề xuất kiểu giải phóng giác kiểu sliding khác Việc giải phóng thực thời gian tuyến tính (tỉ lệ với dung lượng nhớ) yêu cầu thêm bit cho trỏ Một ô nhớ liên kết với ô nhớ trỏ tới nó, gọi "relocation chain" – “di dời dây chuyền” Chuỗi chứa giá trị ô nhớ (ô nhớ cuối dùng ô nhớ đầu làm ô đầu danh sách) trỏ Bit bổ sung ô nhớ xác định chúng “relocated” – di chuyển Hai lần quét thực hiện, lần thứ quét từ cuối nhớ tới đầu nhớ (từ địa cao tới địa thấp nhất) lần quét thứ ngược lại Trong lần quét thực cập nhật tất tham chiếu trỏ tới cá địa thấp nhớ liên kết thích hợp di dời chúng Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 15 Tiểu luận: Nguyên lý ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu kỹ thuật dọn rác Địa tính toán thực việc kiểm tra đánh đấu ô nhớ Các đối tượng liệu hoạt động tập hợp phần địa thấp nhớ, vậy: [Địa ô nhớ] = [Địa thấp nhất] + [tổng số ô nhớ đánh dấu] – [số ô nhớ đánh dấu pha này] Kết thúc lần quét đầu tất trỏ trước cập nhật theo địa ô nhớ trỏ tới Trong lần quét thứ 2, bắt đầu ô nhớ kết thúc ô nhớ cuối nhớ Con trỏ chuyển tiếp (trỏ tới địa cao hơn) cập nhật lần quét đánh dấu ô nhớ di chuyển tới vị trí Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 16 [...]... lý các ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu các kỹ thuật dọn rác C Phần 3 – Đánh dấu và giải phóng rác 3 Đánh dấu và giải phóng rác 3.1 Các giải pháp truyền thống Thu dọn rác được thực hiện trong 2 pha Pha đầu, đánh dấu các đối tượng có thể truy cập; Pha thứ hai, thực hiện quét toàn bộ bộ nhớ và các đốitượng đã đánh dấu được tập hợp lại trong một vùng nhớ liền nhau 3.2 Đánh dấu các đối tượng rác. .. làm giảm chi phí định vị bộ nhớ bằng cách cho phép định vị nhanh từ các vùng chưa đánh dấu kề nhau thay vì sử dụng các danh sách các đối tượng rác - Giải phóng các đối tượng rác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 13 Tiểu luận: Nguyên lý các ngôn ngữ lập trình nhớ + Đề: 05 Tìm hiểu các kỹ thuật dọn rác Các bộ giải phóng dữ liệu kiểu sliding là quan trọng trong các cài đặt tuần tự của của ngôn... chỉnh các tham chiếu bằng cách sắp xếp lại các con trỏ và tính toán các địa chỉ mới Với con trỏ p, bộ thu rác tìm “hole” thứ i, có địa chỉ ai và ai-1< p < ai Trong lần quét thứ 3, bộ thu rác sẽ quét và di chuyển các ô nhớ có thể truy cập vào một vùng để thực hiện giải phóng rác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 14 Tiểu luận: Nguyên lý các ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu các kỹ thuật dọn. .. sách đối tượng rác khác, M-list, chứ các ô của các đối tượng có kích thước khác Viện CNTT – Trường ĐH Bách Khoa Hà Nội Trang 12 Tiểu luận: Nguyên lý các ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu các kỹ thuật dọn rác nhau và được sắp xếp theo địa chỉ của chúng Nếu thực hiện điều này, các ô được thu hồi được liên kết đến các danh sách H-list hoặc M-list tương ứng + Các yêu cầu định vị bộ nhớ được thỏa mãn... Nguyên lý các ngôn ngữ lập trình nhớ Đề: 05 Tìm hiểu các kỹ thuật dọn rác Địa chỉ mới có thể đã được tính toán khi thực hiện việc kiểm tra đánh đấu ô nhớ Các đối tượng dữ liệu hoạt động sẽ được tập hợp trong phần địa chỉ thấp của bộ nhớ, vì vậy: [Địa chỉ mới của ô nhớ] = [Địa chỉ thấp nhất] + [tổng số ô nhớ đã đánh dấu] – [số ô nhớ đã đánh dấu trong pha này] Kết thúc lần quét đầu tất cả các con trỏ... với các ô nhớ rác Nếu khối các ô này không đủ, một sự dồn ô nhớ thực sự sẽ được thực hiện trên các ô nh rác + Các thuật toán quét có 3 nhược điểm chính Thứ nhất, việc xử lý của các ô nhớ có kích thước khác nhau là nặng nề và làm phân mảnh bộ nhớ Thứ hai, chi phí tỉ lệ với kích thước toàn bộ bộ nhớ bởi vì tất cả các đối tượng đang hoạt động đều phải đánh dấu và tất cả rác phải được thu dọn Vấn đề thứ... ô nhớ phù hợp được lấy từ M-list (nếu được) Nếu ô nhớ có kích thức lớn hơn kích thước mong muốn, nó được chia vào 2 ô nhỏ hơn và không bắt buộc mỗi ô nhớ nhỏ này phải liên kết tới 1 trong các danh sách đối tượng rác Nếu yêu cầu định vị bộ nhớ không thỏa mãn, trước hết việc dồn các ô thành một khối được thực hiện để di chuyển các ô nhớ từ H-list sang M-list và sau đó kết hợp chúng sát lại với các ô nhớ. .. dụng các “hole” và tìm kiếm nhị phân cho mỗi tham chiếm + Knuth đề xuất giải thuật thu hồi rác khác sử dụng tuyến tính 3 (hoặc nhiều hơn) lần quét toàn bộ bộ nhớ Trong lần quét đầu tiên các “hole” được liên kết tạo thành một danh sách các đối tượng rác Hai trường được rành riêng trong mỗi “hole” để lưu kích thước của nó và một con trỏ để trỏ tới “hole” kế tiếp (Lần quét tiếp theo có thể kết hợp các. .. tạo trong các cụm và thường được kích hoạt ở cùng một thời điểm Thuật toán thông minh hơn sử dụng các bit đánh dấu có thể tăng tốc độ các giải thuật quét Việc sử dụng phép ánh xạ bit để đánh dấu các bít có thể kiểm tra 32 bit với một phép toán số nguyên 32 bit Khi các đối tượng có khuynh hướng tồn tại lâu hơn trong các cụm, thì điều này làm giảm đáng kể hàng số tỉ lệ chi phí và kích thước bộ nhớ Việc... các kỹ thuật dọn rác + Morris đề xuất một kiểu giải phóng giác kiểu sliding khác Việc giải phóng thực hiện trong thời gian tuyến tính (tỉ lệ với dung lượng bộ nhớ) và yêu cầu thêm 1 bit cho một con trỏ Một ô nhớ được liên kết với các ô nhớ trỏ tới nó, và được gọi là "relocation chain" – “di dời dây chuyền” Chuỗi chứa giá trị của ô nhớ (ô nhớ cuối dùng ô nhớ đầu làm ô đầu danh sách) và các con trỏ Bit ... [Ina90]) Nó lấy lại rác nhớ đối tượng tham chiếu Deutsch Bobrow sử dụng bảng băm cho hệ thống LISP để xử lý đối tượng tham chiếu có hiệu quả, xem Bob75, Deu76, [Coh81] Các chi phí thời gian bao gồm... Không xác định GC tương thích với RAII (bộ khởi tạo tài nguyên) Một số kỹ thuật GC phổ biến 4.1 Tracing Gabage Collection Là loại GC phổ biến Cơ chế hoạt động: Đầu tiên xác định đối tượng truy... phương.Trong hệ thống sử dụng nhớ ảo môi trường phân trang chí chạy máy tính gần cách sử dụng nhớ cache, việc sử dụng tính địa phương nhớ quan trọng Số lượng lớn lỗi trang gọi liệu cần thiết nhớ

Ngày đăng: 30/12/2015, 20:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w