Keuntungan dari pengumpulan sampah adalah mensimulasikan mesin dengan jumlah memori yang tak terbatas. Mekanisme atau implementasi abstraksi itu dimaksudkan untuk sepenuhnya transparan bagi Anda sebagai programmer. Kita semua tahu bahwa mekanisme ini mengambil kembali memori yang tidak lagi digunakan oleh program, tetapi itu sebenarnya tidak dijamin. Jika Anda menjalankan program pada mesin dengan lebih banyak RAM daripada yang pernah digunakan oleh program, maka pengumpulan sampah mungkin tidak akan pernah terjadi. Sekali lagi, tidak relevan, karena Anda bisa menulis program tanpa memperhatikan bagaimana ia menggunakan memori. Manajer memori hanya akan mengalokasikan lebih banyak RAM setiap kali program memintanya, dan Anda boleh berasumsi bahwa alokasi tersebut akan selalu berhasil. Java adalah bahasa yang dikumpulkan sampah, dan C ++ tidak. 1
Kerugian dari pengumpulan sampah adalah, seperti semua abstraksi , cenderung bocor. Itu tidak selalu bekerja dengan sempurna sepanjang waktu, terutama dalam kasus tepi, dan Anda cenderung mengalami bug. Orang-orang yang menulis algoritma pengumpulan sampah (yang seharusnya transparan bagi Anda sebagai seorang programmer) dioptimalkan untuk kasus-kasus yang paling umum, dan masalah dengan kasus-kasus umum adalah bahwa mereka tidak pernah menjadi yang biasa. Secara umum , Anda tidak dapat melakukan yang lebih baik daripada pengumpul sampah dalam mengelola memori. Tetapi dalam keadaan tertentu (dan diberi waktu, energi, dan pengertian yang cukup), itu mungkin saja terjadi. C ++ memberi Anda fleksibilitas ini; Java tidak.
Semua itu mengatakan, saya pikir saran standar untuk memilih bahasa berlaku di sini, bahkan mungkin lebih dalam hal ini mengingat kendala. Pilih bahasa yang paling akrab bagi pengembang utama untuk proyek ini. Selain alasan yang jelas (seperti Anda akan dapat mengembangkan aplikasi lebih cepat dan lebih efisien), ini khususnyapenting dalam kasus yang Anda jelaskan karena pemrograman C ++ seperti Anda memprogram Java akan mengakibatkan praktik manajemen memori yang sangat tidak efektif, dan karenanya bocor dan macet. Secara analogi, pemrograman di Jawa seperti pemrograman pada C ++ tidak akan banyak membantu Anda, dan mungkin menghasilkan program yang kurang dioptimalkan, mengingat algoritma pengumpulan sampah di-tweak dan disetel untuk kasus-kasus yang paling umum .
Programmer yang terbiasa bekerja dalam bahasa yang dikumpulkan sampah belajar untuk mempercayai pengumpul sampah, daripada berjuang melawannya. Jika Anda bekerja dalam bahasa yang dikumpulkan sampah, ini adalah programer yang Anda inginkan pada proyek Anda. Pemrogram yang tidakterbiasa bekerja dalam bahasa yang dikumpulkan sampah secara inheren skeptis terhadap abstraksi "memori tak terbatas", dan seringkali dengan banyak alasan bagus. Sebagus apa pun pemrogram ini, ini bukan yang Anda inginkan dalam bahasa yang dikumpulkan sampah karena mereka akan berjuang melawan GC setiap langkah, terus-menerus menebaknya dan sering menghasilkan lebih lambat, kurang hemat memori kode dari jenis programmer lain. Paling-paling, mereka hanya akan menghabiskan banyak waktu untuk menciptakan kembali roda, membuat Anda menghabiskan banyak uang dan bahkan lebih banyak lagi dalam biaya perawatan jangka panjang.
Dan kemudian Anda juga perlu bertanya pada diri sendiri apakah itu benar-benar penting. Ada lebih dari sekadar isyarat kebenaran dalam komentar sinis Bo: ingatannya sangat murah sekarang, hampir tidak ada nilai terlalu banyak untuk meremas-remas tangan. Bahkan jika Anda membutuhkan jumlah besar , jumlah itu tidak sebesar sekarang 10 tahun yang lalu. Pemrogram dan pengembangan aplikasi jauh lebih mahal daripada hanya membeli sekumpulan RAM dan kekuatan pemrosesan. Itu tidak berarti bahwa Anda harus menghindari ekonomi jika memungkinkan, tetapi itu berarti Anda juga tidak boleh membuang waktu terlalu banyak untuk melakukannya.
1 Tentu saja, asumsi ini menyoroti kelemahan yang lebih dalam dalam pertanyaan. Ternyata, "Java atau C ++" sedikit herring merah. Implementasi Java standar menyediakan pengumpulan sampah dan C ++ tidak sesuai standar bahasa, tetapi sama sekali tidak ada alasan bahwa Anda tidak dapat menggunakan pengumpul sampah pihak ketiga untuk C ++. Banyak perusahaan mencari nafkah dengan menjual barang-barang ini, dan beberapa mungkin mencari nafkah dengan memberikannya secara gratis.