Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
464,54 KB
Nội dung
TRƯỜNG ĐẠI HỌC KINH TẾ QUỐC DÂN VIỆN CÔNG NGHỆ THÔNG TIN – KINH TẾ ***** TIỂU LUẬN MÔN HỌC: NGUN LÝ NGƠN NGỮ LẬP TRÌNH Đề Tài: Kỹ Thuật Garbage Collection Giảng viên hướng dẫn: Ths Lưu Minh Tuấn Họ tên: Nguyễn Văn Toàn Mã sv: 11146219 Lớp: CNTT56B Hà Nội, ngày 12 tháng 05 năm 2019 Nguyễn Văn Tồn – 11146219 MỤC LỤC LỜI NĨI ĐẦU NỘI DUNG Các khái niệm Garbage Collection (GC - dọn rác) 1.1 Các khái niệm 1.2 Tiến trình hoạt động 1.3 Ưu nhược điểm Garbage Collection Biến đếm GC Mark-Sweep Collection - [McCarthy 1960] Mark-Compact Collection (Nén sau đánh dấu) 11 Copying Garbage Collection 12 KẾT LUẬN 15 TÀI LIỆU THAM KHẢO 16 Nguyễn Văn Tồn – 11146219 LỜI NĨI ĐẦU “Cơng nghệ thơng tin tập hợp phương pháp khoa học, phương tiện công cụ kỹ thuật đại – chủ yếu kỹ thuật máy tính viễn thơng - nhằm tổ chức khai thác sử dụng có hiệu nguồn tài nguyên thông tin phong phú tiềm lĩnh vực hoạt động người xã hội ” (Nghị Chính phủ 49/CPngày 04/08/1993) Thế kỷ XXI mở cho thời đại mới, thời đại phát triển vũ bão khoa học cơng nghệ địi hỏi cá nhân ln ln khơng ngừng tìm tịi học tập để trau dồi, hoàn thiện thêm kinh nghiệm, kỹ phát triển theo xu hướng mới, để hội nhập với nước tiên tiến Với nhảy vọt khoa học, thật điều thiếu sót lớn bỏ qua ngành Cơng nghệ thơng tin Với vai trị ngành mũi nhọn lĩnh vực khoa học công nghệ mà Đảng Nhà nước xác định mãnh đất màu mỡ hạt giống sáng tạo Chỉ thời gian ngắn Công nghệ thông tin mang tới thành tựu to lớn hầu hết lĩnh vực khác đời sống xã hội, đặc biệt phải kể đến công nghệ kỹ thuật dọn rác (Garbage Collection) Khi có Garbage Collection, cấp phát nhớ cho đối tượng sau sử dụng khơng cịn tham chiếu tới đối tượng đó, đối tượng đánh dấu để Garbage Collection giải phóng nhớ phân bổ đảm bảo đối tượng có tham chiếu trực tiếp khơng bị xóa khỏi nhớ Vấn đề cần biết là, “Làm Garbage Collection biết vùng nhớ khơng cịn sử dụng thu hồi?” Đó câu hỏi cần giải đáp tìm hiểu “Kỹ thuật Garbage Collection” mà em nói tiểu luận Nguyễn Văn Toàn – 11146219 NỘI DUNG Các khái niệm Garbage Collection (GC - dọn rác) 1.1 Các khái niệm Như biết, rác (garbage) có nghĩa đối tượng khơng cịn tham chiếu thu gom rác (garbage collection) sử dụng để thực trình tự động khơi phục lại nhớ Nói cách khác, cách để phá hủy đối tượng không sử dụng Một khái niệm khác cho rằng, Garbage Collection (GC) trình chạy ngầm để giải phóng vùng nhớ cấp phát cho đối tượng mà ứng dụng khơng cịn sử dụng đối tượng Trong q trình lập trình ví dụ C++ hẳn nhớ đến điểm mạnh phức tạp ngôn ngữ trỏ cấp phát động nhớ Con trỏ C /C++ Con trỏ - Pointer ngôn ngữ C /C++ dễ học thú vị Một vài tác vụ ngôn ngữ C /C++ thực dễ dàng nhờ trỏ, tác vụ khác trở nên linh hoạt hơn, việc cấp phát nhớ, thực mà không dùng trỏ Cấp phát động nhớ kiểu cấp phát thứ hai C++, kiểu cấp phát quan trọng, lập trình viên C++ phải thành thạo Khi sử dụng cấp phát động, buộc phải sử dụng đến biến trỏ toán tử new Giả sử sau kết thúc chương trình mà khơng thu hồi vùng nhớ chuyện xảy ra? Các ô nhớ tồn nhớ chương trình khác khơng thể sử dụng vùng nhớ (hay gọi rò rỉ nhớ – memory leak) Vì thế, yêu cầu bắt buộc sau sử dụng xong vùng nhớ cấp phát phải thu hồi Trong khoa học máy tính, thu dọn rác (Garbage collection hay GC) dạng quản lý nhớ tự động Trong NET (cũng Java) có khái niệm Bộ dọn rác Bộ dọn rác (Garbage collector hay collector), cố gắng thu hồi rác, hay vùng nhớ bị chiếm dụng đối tượng mà khơng cịn sử dụng chương trình Thu gom rác phát minh John McCarthy vào khoảng năm 1959 để đơn giản hóa việc quản lý nhớ thủ công Lisp Nguyễn Văn Toàn – 11146219 Bộ dọn rác tiến trình đặc biệt có nhiệm vụ duyệt qua vùng nhớ cấp phát kiểm tra xem vùng nhớ khơng cịn sử dụng (khơng cịn tham chiếu tới nữa) thực thu hồi cách tự động để cấp phát cho yêu cầu 1.2 Tiến trình hoạt động Chúng ta hình dung tiến trình cơng việc Garbage Collection sau: Khi chương trình khởi chạy vùng nhớ liên tục cịn trống dành riêng để cấp phát cho biến chương trình (vùng nhớ gọi Managed-heap) Khi dùng toán tử new để tạo đối tượng chương trình kiểm tra xem vùng nhớ cịn đủ để cấp phát hay khơng, khơng đủ GC khởi động Bước mà GC thực tạm dừng chương trình thực việc duyệt để đánh dấu tất vùng nhớ sử dụng với khởi đầu điểm biết trước (hay gọi điểm gốc) Vì ta hiểu: * Garbage Collection (GC): - Tự động khôi phục nhớ - Chức GC tìm đối tượng liệu khơng cịn sử dụng giải phóng chúng chương trình chạy * Tại cần đến GC? Nếu tiến trình khơng giải phóng nhớ sử dụng, khoảng trống không sử dụng ngày tăng tiến trình chấm dứt việc trao đổi không gian nhớ không * Rào cản quản lý nhớ: - Lỗi lập trình dẫn đến lỗi quản lý nhớ: + Có thể giải phóng vùng nhớ sớm cần + Có thể khơng giải phóng hết vùng nhớ có thể, nguyên nhân gây thiếu nhớ - Những lỗi đặc biệt nguy hiểm thường xuất sau phân bổ, khó gỡ rối Nguyễn Văn Tồn – 11146219 - Nhiều lập trình viên cấp phát object tĩnh, tránh cấp phát heap để khỏi quan tâm giải phóng chúng - Trong nhiều hệ thống lớn, GC thực thi đối tượng hệ thống (system’s objects) - GC khơng hỗ trợ ngơn ngữ lập trình - Gây lỗi khơng tin cậy, dọn rác riêng lẻ thường không sử dụng ứng dụng khác Vì mục đích GC giải vấn đề * Tính phức tạp GC: - GC đơi xem có chi phí rẻ việc giải phóng tường minh - Một GC tốt làm chương trình chậm 10% - Dù nhiều giá thấp để trả cho: + Sự tiện lợi (Convenience); + Thời gian phát triển (Development time); + Độ tin cậy (Reliability) * Hai phase GC: - Dị tìm rác (garbage detection): + Phân biệt đối tượng sống (live objects) từ rác - Giải phóng rác (garbage reclamation) + Giải phóng vùng nhớ đối tượng rác, để chương trình chạy sử dụng + Trong thực tế phase xen kẽ * Ví dụ: var a:Object = {foo:’’bar’’} // tạo object foo có giá trị bar, sau đặt tham chiếu a: var b:Object = a; // chép tham chiếu sang b delete (a); // xóa tham chiếu a trace(b.foo); // thực trace, kết “bar””-> Kết luận object foo tồn Nguyễn Văn Tồn – 11146219 Như vậy, cịn tham chiếu đến object foo, để GC thực phải đảm bảo khơng cịn tham chiếu đến foo delete (b); Sau thực dòng lệnh 5, foo khơng cịn tham chiếu nên lúc GC giải phóng foo 1.3 Ưu nhược điểm Garbage Collection - Ưu điểm: + Giúp lập trình viên khơng phải xử lý giải phóng nhớ lập trình (vốn gây lỗi ngơn ngữ khơng phải sử dựng GC), giảm thiểu Memory Leaks + Đảm bảo tính tồn vẹn chương trình, GC phần quan trọng khả bảo mật tính an tồn - Nhược điểm: + Ảnh hưởng tới hiệu chương trình JVM phải theo dõi đối tượng tham chiếu trình thực thi mã, sau phải finalize giải phóng đối tượng Biến đếm GC Mỗi đối tượng kết hợp với biến đếm số tham chiếu đến Mỗi có tham chiếu đến đối tượng tạo, biến đếm tham chiếu tăng lên ngược lại Khi biến đếm tham chiếu 0, vùng nhớ dành cho đối tượng giải phóng Nguyễn Văn Tồn – 11146219 Hình 1: Biến đếm Garbage Collector Khi đối tượng giải phóng, biến đếm tham chiếu đối tượng mà đối tương trỏ đến giảm xuống Việc giải phóng đối tượng kéo theo việc giải phóng hàng loại đối tượng khác Đó vấn đề việc tìm hiểu biến đếm Garbage Collection gồm giai đoạn: việc điều chỉnh kiểm tra biến đếm thực giai đoạn đầu, việc giải phóng xảy biến đếm 0, thao tác phải xen vào chương trình thực thi Bởi chúng xay trỏ tạo giải phóng Một ưu điểm sử dụng biến đếm việc cập nhật biến đếm xen vào chương trình thực thi, việc có thển thực cách dễ dàng Rõ ràng việc cập nhật biến đếm không liên quan đến thao tác để chương trình thực thi Việc giải phóng hàng loạt tồn cấu trúc liệu bị trì hỗn, có danh sách đối tượng garbage mà biến đếm chúng việc giải phóng chưa xử lý Việc thu gom tăng cường dễ dàng thỏa mãn yêu cầu thời gian thực, đảm bảo thao tác quản lý nhớ khơng trì hỗn chương trình chương trình thực thi Điều hỗ trợ chương trình mà việc đảm bảo thời gian then chốt Đồng thời việc thu gom tăng cường đảm bảo cho chương trình thực Nguyễn Văn Toàn – 11146219 thi cách hiệu thông qua việc giảm bớt số lượng công việc mà người lập trình cần phải làm(thu gom rác) * Vấn đề cấu trúc vòng: Biến đếm thất bại giải phóng cấu trúc vịng, ngun nhân từ việc xác định rác Cấu trúc vịng khơng chương trình ngày nay(Cây,Cấu trúc liệu vịng) Khi giải pháp chuyển cho lập trình viên * Hiệu biến đếm: - Khi trỏ tạo, biến đếm tham chiếu đối tượng mà trỏ đến phải điều chỉnh + Nếu giá trị biến trỏ chuyển từ trỏ đến trỏ khác(phép gán), hai biến đếm hai trỏ phải cập nhật, biến RC đối tượng tăng biến giảm + Sau phải kiểm tra biến đếm = hay không - Những biến ngăn xếp mà có thời gian sống ngắn phải chịu chi phí lớn cho mơ hình biến đếm Trong trường hợp biến đếm tham chiếu tăng lên giảm trở lại nhanh chóng * Biến đếm cục bộ: Phần lớn chi phí tối ưu cách sử dụng biến cục bộ: - Tham chiếu từ biến cục không cần giữ lại Chúng ta cần điều chỉnh biến đếm heap Tuy nhiên khơng thể bỏ qua hồn tồn trỏ stack Vì stack quét trước đối tượng giải phóng biến đếm trỏ = giải phóng Hạn chế cập nhật biến đếm trỏ stack giảm đáng kể chi phí biến đếm Mark-Sweep Collection - [McCarthy 1960] Kỹ thuật Mark-Sweep giải vấn đề cấu trúc vòng Reference Counting Collection Phân biệt đối tượng sống từ rác (Mark phase) Thực đánh dấu: Nguyễn Văn Toàn – 11146219 - Bắt đầu root set duyệt qua đồ thị trỏ đến được: + Đánh dấu đối tượng qua + Thu hồi vùng nhớ rác (Sweep phase) - Sau Mark phase, nhớ kiểm tra kỹ lưỡng để tìm đối tượng không đánh dấu(rác) thu hồi chúng - Dùng bit làm mark-bit : đánh dấu : khơng đánh dấu * Ví dụ: * Thuật tốn 10 Nguyễn Văn Tồn – 11146219 * Tính chất Mark & amp; Sweep - Phân mảnh: + Khó cấp phát đối tượng lớn + Vài đối tượng nhỏ lấy nhiều khoảng trống - Chi phí: + Tỉ lệ với kích thước heap, gồm đối tượng sống rác - Locality of reference: + Không di chuyển đối tượng + Đối tượng đặt lẫn lộn nguyên nhân nhiều page swaps (Thơng thường đối tượng cluster thường active lúc) * Ưu điểm: - Không cần cấp thêm vùng nhớ để lưu trữ trường count - Các object khơng cần di chuyển q trình GC - Loại bỏ rác 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ớ (integer) - Tăng khả làm phân mảnh vùng nhớ - Chương trình phải tạm dừng GC thực thi - Giai đoạn sweep tốn chi phí cao (thời gian) Mark-Compact Collection (Nén sau đánh dấu) - Mark-Compact giải vấn đề phân mảnh cấp phát mark-sweep - Bộ dọn rác duyệt qua đồ thị trỏ thực chép đối tượng sống sau bước - Kết vùng trống liên tục Đối tượng sống phía rác vùng trống phía - Những đối tượng rác nén cuối nhớ - Tiến trình trải qua số bước nhớ: + Một để tính vị trí đối tượng (địa chỉ) + Cập nhật con trỏ di chuyển đối tượng - Thuật toán chậm đáng kể so với Mark-Sweep - Hai thuật tốn ví dụ Mark-Compact: 11 Nguyễn Văn Toàn – 11146219 + Two-finger Alg– cho đối tượng có kích thước + Lisp Alg - Ví dụ: Thứ tự đối tượng Copying Garbage Collection - Giống Mark-Compact, thuật toán di chuyển tất live objects vào khu vực, phần lại heap giải phóng - Có vài phương thức cho copying GC, “Stop and-Copy” ví dụ * Stop-and-Copy Collector: - Bộ nhớ heap chia làm phần - Khi chương trình chạy yêu cầu cấp phát mà khơng cịn đủ vùng nhớ chưa sử dụng - Chương trình dừng copying GC Được gọi để thu hồi khoảng trống * Thuật toán Init()= New(n)= Tospace=Heap_bottom If free+n >top_of_space space_size=Heap_size/2 Collect() top_of_space=Tospace+space_si if free+n >top_of_space ze abort“Memoryexhausted” Fromspace=top_of_space+1 new-object=free free=Tospace free=free+n 10 return(new-object) collect()= copy(P)= from-space,to-space= ifforwarded(P) to-space, from- returnforwarding_address( space//swap P) scan=free=Tospace else addr=free 12 Nguyễn Văn Toàn – 11146219 top_of_space=Tospace+space_size mem-copy(P,free) forRinRoots free=free+size(P) R=copy(R) forwarding_address(P)=ad whilescan