2010-05-28 13 views
10

Tôi tự hỏi sự khác biệt là gì hoặc nếu nó giống nhau trên cả hai.Cách thu gom rác được thực hiện bằng Java và nó so sánh với .net như thế nào?

+1

Mọi người có thể bỏ phiếu để đóng mục này là "không phải là câu hỏi thực sự" để giải thích động cơ của họ không? Nó không giống như anh chàng có 100 đại diện. – Josh

+0

Phần 1 ('làm thế nào là gc thực hiện trong Java') đã được bao phủ bởi hàng chục câu hỏi về SO. –

+0

@Andreas để trích dẫn Dylan "Nếu có một ý tưởng ban đầu, tôi có thể sử dụng ngay bây giờ". Mọi câu hỏi đã được hỏi về SO bây giờ. Nhưng nếu mọi người muốn đóng nó như là một bản sao, ít nhất là chọn tùy chọn đó từ trình đơn vì nó cung cấp cho các tài liệu tham khảo OP cho các bài viết khác. – Josh

Trả lời

1

Tôi tìm thấy điều này link từ khác question on SO của chúng tôi trả lời một chút về sự khác biệt của bộ sưu tập rác trong Java và .NET/C# . Đối với những người khác đang tìm kiếm loại thông tin này, tại đây là

Trong các đối tượng Java được tạo bằng cách sử dụng từ khóa mới. Hầu hết các lớp học trong C# được tạo trên heap bằng cách sử dụng từ khóa mới. Cũng giống như JVM quản lý sự tàn phá của đối tượng như vậy cũng không CLR thông qua một Mark và thu gom rác thải nhỏ gọn thuật toán

LƯU Ý: C# cũng hỗ trợ dựa trên stack lớp, gọi là kiểu giá trị, đó là thảo luận bên dưới.

+0

http://www.brpreiss.com//books/opus5/html/page428.html có thông tin tốt và thuật toán Marc và nhỏ gọn. –

1

Tôi cho rằng không có sự khác biệt về khái niệm. Vì các mô hình bộ nhớ khác nhau (for example volative difference), việc thực hiện có thể thay đổi.

+1

Có thể không có sự khác biệt về mặt khái niệm ở mức cao (nghĩa là thu gom rác trên cả hai nền tảng có cùng chức năng - dọn dẹp các đối tượng không được tham chiếu nữa), nhưng có một số thuật toán khác nhau để thực hiện điều này, thực hiện, ngay cả giữa các phiên bản khác nhau của JVM của Sun, chẳng hạn. – Jesper

+0

IMHO nếu bạn cần phải lo lắng về cách GC hoạt động trong 99% có nghĩa là bạn không cần GC ở tất cả. –

2

Câu hỏi này không phải là câu trả lời.

Thứ nhất, không có thông số kỹ thuật nào có liên quan sẽ nói bất cứ điều gì về cách Java hoặc .net nên triển khai thu thập rác. Vì vậy, theo nghĩa đen không có "cách GC được thực hiện" trong Java hoặc trong .net. Thứ hai, chi tiết về cách GC được thực hiện khác nhau giữa các nhà cung cấp khác nhau cho Java và .net tương ứng, và đối với bất kỳ nhà cung cấp nào, GC có thể thay đổi với mỗi nền tảng, mỗi phiên bản chính, phiên bản nhỏ và thậm chí mỗi phiên bản vá. Ngày đầu đó, một số triển khai của Java cho phép bạn lựa chọn giữa các bộ gom rác khác nhau bằng cách sử dụng các tùy chọn dòng lệnh.

Cuối cùng, không thực sự quan trọng như thế nào GC được thực hiện trong thực hiện Java hoặc .net cung cấp rằng nó có thể được thực hiện để hoạt động theo yêu cầu của ứng dụng. Và đối với Java, câu trả lời là nó có thể cho hầu hết các loại ứng dụng. (Các trường hợp ngoại lệ thường là các hệ thống/ứng dụng có yêu cầu thời gian thực khó khăn hoặc hạn chế về bộ nhớ rất chặt.)

+0

Nhưng đối với một số lý thuyết cơ sở và nền tảng cơ bản: http://stackoverflow.com/questions/2910224/java-garbage-collection/2922042#2922042 –

+0

@Andreas_D - có mô tả chi tiết hơn về Java GC xung quanh mô tả được tham chiếu. Và cả hai trang được tham chiếu đều cũ. Các GC Java chắc chắn đã thay đổi đáng kể kể từ 1.4.1. –

Các vấn đề liên quan