Model memori Java menentukan bagaimana dan kapan thread yang berbeda dapat melihat nilai-nilai yang ditulis di variabel bersama oleh thread lain, dan bagaimana cara mensinkronisasi akses ke variabel bersama bila diperlukan. Model memori...
moreModel memori Java menentukan bagaimana dan kapan thread yang berbeda dapat melihat nilai-nilai yang ditulis di variabel bersama oleh thread lain, dan bagaimana cara mensinkronisasi akses ke variabel bersama bila diperlukan. Model memori ditentukan bila tindakan dari satu thread pada memori terlihat oleh thread lain. Digunakan di arsitektur Multi-processor. Dengan munculnya arsitektur multiprosesor, memori bersama telah menunjukkan untuk menjadi model komunikasi sederhana dan nyaman untuk pemrograman paralel. Namun, penggunaan memori bersama memerlukan mekanisme sinkronisasi untuk menjaga memori dari sistem secara keseluruhan agar up-to-date dan koheren. Mekanisme sinkronisasi semacam ini memiliki dampak besar pada kinerja sistem; untuk menghindari ini, dilakukan beberapa relaksasi dari konsistensi (atau koherensi) sistem memori. Namun, relaksasi ini mungkin menyebabkan program untuk memiliki perilaku tak terduga (dari sudut pandang programmer). Secara umum, lebih relax sistem memori, semakin sulit untuk menjalankan program. Sebuah model memori mendefinisikan semua hasil yang mungkin dari program multi-threaded yang berjalan pada arsitektur memori bersama yang mengimplementasikannya. Pada intinya, model memory adalah spesifikasi dari nilai yang mungkin yang membaca akses pada memori dan diperbolehkan untuk kembali, dan semua spesifikasi semantik multi-threaded dari platformnya. Java adalah salah satu dari beberapa bahasa pemrograman utama dengan model memori terdefinisikan secara tepat. model memori awal java memperbolehkan perilaku dengan kebocoran keamanan, di samping itu, java menegah hampir semua single-threaded optimasi compiler. Oleh karena itu, sejak Java 1.5, sebuah model memori baru telah diperkenalkan, yang memperbaiki kecacatan tersebut. The Java Memory Model (JMM) telah dirancang dengan dua tujuan : (i) mengoptimalisasi kompiler sebanyak mungkin harus diperbolehkan, dan (ii) rata-rata programmer tidak harus memahami semua seluk-beluk model. Untuk mencapai tujuan kedua, JMM menyediakan Jaminan data Ras freeness (DRF) : jika program tidak mengandung ras data, prilau yang diperbolehkan dapat dijelaskan dengan semantik interleaving. Dalam JMM, seperti yang disebutkan sebelumnya, memiliki dua tujuan utama. Tetapi tujuan pertama dibatasi oleh Tujuan kedua: untuk membuat tugas pemrograman multithreaded mudah bagi programmer. Ini adalah fakta yang diketahui dengan baik bahwa pemrograman multithreaded adalah tugas yang