Ưu điểm của bộ sưu tập rác là nó mô phỏng một cỗ máy có dung lượng bộ nhớ vô hạn. Cơ chế hoặc việc thực hiện sự trừu tượng đó nhằm mục đích hoàn toàn minh bạch đối với bạn với tư cách là người lập trình. Chúng ta đều biết rằng cơ chế đang lấy lại bộ nhớ không còn được sử dụng bởi chương trình, nhưng điều đó không thực sự được đảm bảo. Nếu bạn chạy chương trình trên một máy có nhiều RAM hơn chương trình thực sự sử dụng, thì việc thu gom rác có thể không bao giờ xảy ra. Một lần nữa, không liên quan, bởi vì bạn chỉ có thể viết chương trình mà không cần quan tâm đến cách nó sử dụng bộ nhớ. Trình quản lý bộ nhớ sẽ chỉ phân bổ thêm RAM bất cứ khi nào chương trình yêu cầu và bạn được phép cho rằng các phân bổ đó sẽ luôn thành công. Java là ngôn ngữ được thu gom rác và C ++ thì không. 1
Nhược điểm của bộ sưu tập rác là, giống như tất cả các khái niệm trừu tượng , nó có xu hướng bị rò rỉ. Nó không phải lúc nào cũng hoạt động hoàn hảo mọi lúc, đặc biệt là trong các trường hợp cạnh và bạn có khả năng gặp phải lỗi. Những người đã viết thuật toán thu gom rác (một thuật toán được coi là minh bạch đối với bạn với tư cách là một lập trình viên) được tối ưu hóa cho các trường hợp phổ biến nhất và rắc rối với các trường hợp phổ biến là chúng không bao giờ phổ biến. Nói chung , bạn không thể làm tốt hơn công cụ thu gom rác trong việc quản lý bộ nhớ. Nhưng trong những trường hợp cụ thể (và được cung cấp đủ thời gian, năng lượng và sự hiểu biết), điều đó có thể là có thể. C ++ mang đến cho bạn sự linh hoạt này; Java thì không.
Tất cả những gì đã nói, tôi nghĩ rằng lời khuyên tiêu chuẩn cho việc chọn một ngôn ngữ áp dụng ở đây, có lẽ còn hơn thế nữa trong trường hợp này với những hạn chế. Chọn ngôn ngữ quen thuộc nhất với các nhà phát triển chính cho dự án. Ngoài các lý do rõ ràng (như bạn sẽ có thể phát triển ứng dụng nhanh hơn và hiệu quả hơn), điều này đặc biệtquan trọng trong trường hợp mà bạn mô tả vì lập trình C ++ như bạn đang lập trình Java sẽ dẫn đến các thực tiễn quản lý bộ nhớ không hiệu quả khủng khiếp, do đó bị rò rỉ và gặp sự cố. Tương tự, lập trình trong Java giống như bạn lập trình trong C ++ sẽ không giúp ích gì cho bạn và cuối cùng có thể tạo ra một chương trình ít được tối ưu hóa, do các thuật toán thu gom rác được điều chỉnh và điều chỉnh cho các trường hợp phổ biến nhất .
Các lập trình viên đã từng làm việc trong các ngôn ngữ thu gom rác học cách tin tưởng người thu gom rác hơn là chiến đấu chống lại nó. Nếu bạn đang làm việc trong một ngôn ngữ được thu gom rác, đây là những lập trình viên mà bạn muốn trong dự án của mình. Lập trình viên khôngĐược sử dụng để làm việc trong một ngôn ngữ được thu gom rác vốn đã bị hoài nghi về sự trừu tượng "bộ nhớ vô hạn" như vậy và thường có rất nhiều lý do chính đáng. Tốt như những lập trình viên này có thể là, đây không phải là những người bạn muốn làm việc bằng ngôn ngữ được thu gom rác bởi vì họ sẽ chiến đấu chống lại GC mỗi bước, liên tục đoán nó và thường tạo ra chậm hơn, ít hiệu quả bộ nhớ hơn mã hơn các loại lập trình viên khác. Tốt nhất, họ sẽ chỉ dành nhiều thời gian để phát minh lại bánh xe, khiến bạn tốn rất nhiều tiền và thậm chí nhiều hơn trong chi phí bảo trì dài hạn.
Và sau đó bạn cũng cần tự hỏi liệu nó có thực sự quan trọng không. Có nhiều hơn một gợi ý về sự thật đối với nhận xét về tiếng ngáy của Bo: bộ nhớ bây giờ rất rẻ, hầu như không đáng để vắt tay quá nhiều. Thậm chí nếu bạn cần đồ sộ lượng, số tiền đó là gần như không lớn bây giờ vì họ đã cách đây 10 năm. Các lập trình viên và phát triển ứng dụng là xa đắt hơn chỉ mua gobs RAM và sức mạnh xử lý. Điều đó không có nghĩa là bạn nên tránh kinh tế khi có thể, nhưng điều đó có nghĩa là bạn cũng không nên lãng phí quá nhiều thời gian để làm điều đó.
1 Tất nhiên, giả định này nêu bật một lỗ hổng sâu hơn trong câu hỏi. Hóa ra, "Java hoặc C ++" là một chút cá trích đỏ. Việc triển khai Java tiêu chuẩn cung cấp bộ sưu tập rác và C ++ không theo tiêu chuẩn ngôn ngữ, nhưng hoàn toàn không có lý do gì mà bạn không thể sử dụng trình thu gom rác của bên thứ ba cho C ++. Rất nhiều công ty đã kiếm sống bằng việc bán những thứ này, và một số có lẽ đã kiếm sống miễn phí.