Rekan Anda tidak tahu apa yang mereka bicarakan.
Operasi Anda yang paling mahal adalah mendengarkan mereka . Mereka menyia-nyiakan waktu Anda untuk mengarahkan Anda ke informasi yang lebih dari satu dekade kedaluwarsa (sejak tanggal asli jawaban ini diposting) serta Anda harus menghabiskan waktu memposting di sini dan meneliti Internet untuk kebenaran.
Semoga mereka hanya memuntahkan sesuatu yang mereka dengar atau baca dari lebih dari satu dekade yang lalu dan tidak tahu yang lebih baik. Saya akan mengambil apa pun yang mereka katakan sebagai tersangka juga, ini harus menjadi kesalahan yang diketahui oleh siapa pun yang tetap up to date.
Semuanya adalah Obyek (kecuali primitives
)
Segala sesuatu selain primitif ( int, long, double
, dll) adalah Objek di Jawa. Tidak ada cara untuk menghindari pembuatan Objek di Jawa.
Penciptaan objek di Jawa karena strategi alokasi memorinya lebih cepat daripada C ++ dalam banyak kasus dan untuk semua tujuan praktis dibandingkan dengan segala hal lain di JVM dapat dianggap "bebas" .
Pada awal tahun 2000-an awal implementasi JVM memang memiliki beberapa overhead kinerja dalam alokasi Obyek yang sebenarnya. Ini tidak terjadi sejak setidaknya 2005.
Jika Anda menyetel -Xms
untuk mendukung semua memori yang Anda butuhkan agar aplikasi Anda dapat berjalan dengan benar, GC mungkin tidak pernah harus menjalankan dan menyapu sebagian besar sampah dalam implementasi GC modern, program yang berumur pendek mungkin tidak pernah GC sama sekali.
Itu tidak mencoba dan memaksimalkan ruang kosong, yang merupakan herring merah, itu memaksimalkan kinerja runtime. Jika itu berarti JVM Heap hampir 100% dialokasikan sepanjang waktu, maka jadilah itu. Memori tumpukan JVM gratis tidak memberi Anda apa-apa hanya duduk di sana saja.
Ada kesalahpahaman bahwa GC akan membebaskan memori kembali ke seluruh sistem dengan cara yang bermanfaat, ini sepenuhnya salah!
Tumpukan JVM tidak tumbuh dan menyusut sehingga sisa sistem secara positif dipengaruhi oleh memori bebas di Tumpukan JVM . -Xms
mengalokasikan SEMUA dari apa yang ditentukan pada startup dan heuristiknya adalah untuk tidak pernah benar-benar melepaskan memori itu kembali ke OS untuk dibagikan dengan proses OS lainnya sampai instance JVM berhenti sepenuhnya. -Xms=1GB -Xmx=1GB
mengalokasikan 1GB RAM terlepas dari berapa banyak objek yang sebenarnya dibuat pada waktu tertentu. Ada beberapa pengaturan yang memungkinkan persentase memori tumpukan untuk dilepaskan, tetapi untuk semua tujuan praktis JVM tidak pernah mampu melepaskan cukup memori ini agar hal ini dapat terjadijadi tidak ada proses lain yang bisa mendapatkan kembali memori ini, sehingga sisa dari sistem tidak mendapat manfaat dari JVM Heap menjadi gratis juga. RFE untuk ini "diterima" 29-NOV-2006, tetapi belum pernah dilakukan. Ini adalah perilaku yang tidak dianggap masalah oleh siapa pun yang berwenang.
Ada kesalahpahaman bahwa membuat banyak objek kecil yang berumur pendek menyebabkan JVM berhenti untuk jangka waktu yang lama, ini sekarang salah juga
Algoritma GC saat ini sebenarnya dioptimalkan untuk membuat banyak banyak objek kecil yang berumur pendek, yang pada dasarnya adalah 99% heuristik untuk objek Java di setiap program. Upaya di Object Pooling benar-benar akan membuat kinerja JVM lebih buruk dalam banyak kasus.
Satu-satunya Objek yang perlu dikumpulkan hari ini adalah Obyek yang merujuk pada sumber daya terbatas yang berada di luar JVM; Soket, File, Koneksi Basis Data, dll dan dapat digunakan kembali. Objek biasa tidak dapat digabungkan dalam arti yang sama seperti dalam bahasa yang memungkinkan Anda akses langsung ke lokasi memori. Objek caching adalah konsep yang berbeda dan mungkin atau mungkin tidak apa yang beberapa orang naif menyebut pooling , dua konsep yang tidak sama dan tidak boleh digabungkan.
Algoritma GC modern tidak memiliki masalah ini karena mereka tidak mengalokasikan pada jadwal, mereka mendelokasi ketika memori bebas diperlukan dalam generasi tertentu. Jika tumpukan cukup besar, maka tidak ada alokasi yang cukup lama untuk menyebabkan jeda.
Berorientasi Objek Bahasa dinamis mengalahkan C bahkan sekarang berhari-hari pada pengujian sensitif komputasi.