ข้อดีของการรวบรวมขยะคือมันจำลองเครื่องที่มีหน่วยความจำไม่ จำกัด จำนวน กลไกหรือการนำไปปฏิบัติของสิ่งที่เป็นนามธรรมนั้นมีจุดประสงค์เพื่อความโปร่งใสอย่างสมบูรณ์สำหรับคุณในฐานะโปรแกรมเมอร์ เราทุกคนรู้ว่ากลไกกำลังเรียกคืนหน่วยความจำที่ไม่ได้ใช้โดยโปรแกรมอีกต่อไป แต่นั่นไม่ได้รับประกันจริง หากคุณเรียกใช้โปรแกรมบนเครื่องที่มี RAM มากกว่าที่โปรแกรมใช้จริงการรวบรวมขยะอาจไม่เกิดขึ้น อีกครั้งไม่เกี่ยวข้องเพราะคุณสามารถเขียนโปรแกรมโดยไม่คำนึงถึงวิธีการใช้หน่วยความจำ ตัวจัดการหน่วยความจำจะจัดสรร RAM เพิ่มเติมเมื่อใดก็ตามที่โปรแกรมร้องขอและคุณได้รับอนุญาตให้สมมติว่าการจัดสรรดังกล่าวจะประสบความสำเร็จเสมอ Java เป็นภาษาที่รวบรวมขยะและ C ++ ไม่ใช่ 1
ข้อเสียของการรวบรวมขยะก็คือเช่นเดียวกับ abstractions ทั้งหมดมันมีแนวโน้มที่จะรั่วไหล มันไม่ได้ทำงานอย่างสมบูรณ์แบบตลอดเวลาโดยเฉพาะในกรณีที่มีขอบและคุณมีแนวโน้มที่จะพบข้อบกพร่อง คนที่เขียนอัลกอริทึมการรวบรวมขยะ (ที่ควรจะโปร่งใสสำหรับคุณในฐานะโปรแกรมเมอร์) ได้รับการปรับให้เหมาะกับกรณีที่พบบ่อยที่สุดและปัญหาของกรณีทั่วไปก็คือพวกเขาไม่เคยพบเห็นกันทั้งหมด โดยทั่วไปแล้วคุณไม่สามารถทำได้ดีไปกว่าที่ตัวรวบรวมขยะสามารถจัดการหน่วยความจำได้ แต่ในบางสถานการณ์ (และให้เวลาพลังงานและความเข้าใจเพียงพอ) อาจเป็นไปได้ C ++ ช่วยให้คุณมีความยืดหยุ่น Java ไม่ได้
จากทั้งหมดที่กล่าวมาฉันคิดว่าคำแนะนำมาตรฐานสำหรับการเลือกภาษาใช้ที่นี่บางทีอาจจะมากกว่านั้นในกรณีนี้เนื่องจากข้อ จำกัด เลือกภาษาที่ผู้พัฒนาหลักคุ้นเคยที่สุดสำหรับโครงการ นอกเหนือจากเหตุผลที่ชัดเจน (เช่นคุณจะสามารถพัฒนาแอปได้เร็วขึ้นและมีประสิทธิภาพมากขึ้น) นี่เป็นสิ่งพิเศษสำคัญในกรณีที่คุณอธิบายเนื่องจากการเขียนโปรแกรม C ++ เหมือนกับที่คุณกำลังเขียนโปรแกรม Java จะส่งผลให้เกิดแนวทางการจัดการหน่วยความจำที่ไม่มีประสิทธิภาพมากดังนั้นจึงเกิดการรั่วไหลและล้มเหลว การเขียนโปรแกรมแบบจาวาเช่นเดียวกับที่คุณเขียนโปรแกรมใน C ++ จะไม่ทำให้คุณเก่งมากและอาจทำให้การผลิตโปรแกรมน้อยกว่าที่ได้รับการปรับให้เหมาะสมเนื่องจากอัลกอริทึมการรวบรวมขยะถูกปรับแต่งและปรับสำหรับกรณีที่พบบ่อยที่สุด .
โปรแกรมเมอร์ที่ใช้ในการทำงานในภาษาที่เก็บขยะเรียนรู้ที่จะเชื่อถือนักเก็บขยะแทนที่จะต่อสู้กับมัน หากคุณกำลังทำงานในภาษาที่รวบรวมขยะเหล่านี้คือโปรแกรมเมอร์ที่คุณต้องการในโครงการของคุณ โปรแกรมเมอร์ที่ไม่ใช่ใช้ในการทำงานในภาษาที่เก็บขยะมีความสงสัยในสิ่งที่เป็นนามธรรม "หน่วยความจำที่ไม่มีที่สิ้นสุด" และบ่อยครั้งที่มีเหตุผลที่ดีมากมาย ดีเท่าที่โปรแกรมเมอร์เหล่านี้อาจเป็นคนเหล่านี้ไม่ใช่คนที่คุณต้องการทำงานในภาษาที่เก็บขยะเพราะพวกเขาจะต่อสู้กับ GC ทุกขั้นตอนโดยคาดเดาอย่างต่อเนื่องเป็นครั้งที่สองและมักจะผลิตช้าลง รหัสกว่าโปรแกรมเมอร์ประเภทอื่น ๆ ที่ดีที่สุดพวกเขาจะใช้เวลามากในการปรับแต่งล้อทำให้คุณต้องเสียเงินเป็นจำนวนมากและค่าใช้จ่ายในการบำรุงรักษาในระยะยาว
แล้วคุณต้องถามตัวเองด้วยว่ามันสำคัญหรือไม่ มีมากกว่าความจริงในการแสดงความคิดเห็นต่อเรื่องของ Bo: ความทรงจำราคาถูกตอนนี้มันแทบจะไม่คุ้มค่าที่จะเขียนด้วยมือมากเกินไป แม้ว่าคุณจะต้องมีขนาดใหญ่จำนวนเงินจำนวนเงินเหล่านี้จะไม่ได้เกือบเป็นใหญ่ในขณะนี้ขณะที่พวกเขา 10 ปีที่ผ่านมา โปรแกรมเมอร์และนักพัฒนาโปรแกรมอยู่ไกลมีราคาแพงกว่าเพียงแค่การซื้อ gobs of RAM และพลังการประมวลผล นั่นไม่ได้หมายความว่าคุณควรหลีกเลี่ยงเศรษฐกิจหากเป็นไปได้ แต่ก็หมายความว่าคุณไม่ควรเสียเวลาทำเช่นนั้น
1แน่นอนสมมติฐานนี้เน้นข้อบกพร่องที่ลึกกว่าในคำถาม เมื่อปรากฎว่า "Java หรือ C ++" เป็นปลาเฮอริ่งแดงนิดหน่อย การนำ Java มาตรฐานไปใช้นั้นมีการรวบรวมขยะและ C ++ นั้นไม่ได้มาตรฐานตามภาษา แต่ไม่มีเหตุผลใดที่คุณไม่สามารถใช้ตัวรวบรวมขยะบุคคลที่สามสำหรับ C ++ ได้ บริษัท หลายแห่งทำมาหากินขายสิ่งเหล่านี้และบางแห่งอาจทำมาหากินให้ฟรี