Berikut fakta-faktanya:
bahasa Go memiliki pengumpul sampah.
Java memiliki tempat pengumpulan sampah
banyak program Java yang mengalami kebocoran memori (halus atau tidak)
Sebagai contoh program Java yang mengalami kebocoran memori (bukan untuk yang lemah hati, pertanyaannya mungkin menggoyahkan keyakinan Anda), lihat di sini tentang program Java kecil bernama Tomcat yang bahkan memiliki tombol "temukan kebocoran": Adakah cara untuk menghindari kebocoran memori undeployment di Tomcat?
Jadi saya bertanya-tanya: akankah program yang ditulis dalam Go menunjukkan jenis kebocoran memori (halus atau tidak) yang sama dengan beberapa program yang ditulis di pameran Java?
java
memory-leaks
go
SintaksT3rr0r
sumber
sumber
memory leak
lebih baik daripada definisi Anda".Jawaban:
Anda membingungkan berbagai jenis kebocoran memori di sini.
Kebocoran memori berbasis manajemen memori eksplisit yang keji hilang di Java (atau bahasa berbasis GC lainnya). Kebocoran ini disebabkan oleh kehilangan akses sepenuhnya ke potongan memori tanpa menandainya sebagai tidak digunakan.
"Kebocoran memori" masih ada di Jawa dan setiap bahasa lain di muka planet ini sampai komputer dapat membaca pikiran kita masih bersama kita, dan akan terus ada di masa mendatang. Kebocoran ini disebabkan oleh kode / pemrogram menyimpan referensi ke objek yang secara teknis tidak lagi diperlukan. Ini pada dasarnya adalah bug logika, dan tidak dapat dicegah dalam bahasa apa pun menggunakan teknologi saat ini.
sumber
java.util.logging.Level
yang berisi statis pribadiArrayList
tempat semua objek yang ditempatkan pada konstruksi, dan dari mana mereka tidak pernah dihapus), yang membuatnya lebih sulit untuk menghindarinya saat memprogram Java daripada dalam beberapa bahasa lain yang tidak mengandung kekurangan seperti ituSangat mungkin program Go akan menunjukkan kebocoran memori. Implementasi Go saat ini memiliki pengumpul sampah mark-and-sweep sederhana. Ini hanya dimaksudkan sebagai solusi sementara dan tidak dimaksudkan sebagai pengumpul sampah jangka panjang. Lihat halaman ini untuk info lebih lanjut. Lihat di bawah tajuk
Go Garbage Collector
. Halaman itu bahkan memiliki link ke kode untuk versi saat ini jika Anda menginginkannya.sumber
'Kebocoran memori' adalah ketika bagian dari memori yang menurut pemrogram akan dibebaskan tidak dibebaskan. Ini bisa terjadi dalam bahasa apa pun, sampah dikumpulkan atau tidak. Penyebab umum dalam bahasa GC adalah mempertahankan referensi tambahan ke memori.
"Bahasa tidak menyebabkan kebocoran memori, pemrogram menyebabkan kebocoran memori".
sumber
Pengumpulan sampah atau tidak, Anda dapat menulis program yang memiliki kebocoran memori di Java, Go, atau bahasa lain untuk sebagian besar.
Pengumpulan Sampah memang mengambil sebagian beban dari pemrogram tetapi tidak mencegah kebocoran sepenuhnya.
sumber
Anda mencampurkan tingkat abstraksi di sini: kebocoran memori disebabkan oleh bug di perpustakaan (di mana objek saling mereferensikan melalui rantai 'a memegang referensi ke b' serta trade-off dalam implementasi pengumpul sampah antara efisiensi dan akurasi. Berapa banyak waktu yang ingin Anda habiskan untuk mencari loop seperti itu? Jika menghabiskan dua kali lebih banyak, Anda akan dapat mendeteksi loop dua kali lebih lama.
Jadi masalah kebocoran memori bukanlah bahasa pemrograman khusus, tidak ada alasan bahwa GO dengan sendirinya harus lebih baik atau lebih buruk daripada Java.
sumber