Ketika menyebutkan memori di Java, banyak orang akan berpikir tentang JVM. Model memori yang dibahas dalam artikel ini juga akan disalahpahami. Sebenarnya ini juga merupakan test point yang lebih memungkinkan terjadinya kesalahan dalam wawancara. Singkatan dari memory model adalah jmm. Saya yakin tidak akan mudah bingung jika ditampilkan dalam nama bahasa inggris. Di bawah ini kami akan menjelaskan konsep model memori Java dan membantu Anda membedakannya dari jvm.
1. Konsep
Model Memori Java (Memori Utama Java, disingkat JMM) adalah konsep abstrak dan memiliki banyak kesamaan dengan model memori komputer. JMM terutama mencakup thread, memori kerja, dan memori utama untuk berinteraksi. Memori kerja dapat dibandingkan dengan cache perhitungan, tetapi memori kerja antar thread tidak bergantung satu sama lain, memori utama mirip dengan memori utama komputer , dan transfer nilai variabel antar thread terutama dilakukan melalui memori utama. Pada saat yang sama, JMM juga memiliki penataan ulang instruksi untuk mengoptimalkan urutan eksekusi kode. Sederhananya, urutan penulisan kode belum tentu urutan eksekusi kode.
2. Perbedaan antara JMM dan JVM
Model memori Java terlihat mirip dengan struktur memori Java (struktur memori JVM). Banyak orang yang salah mengira bahwa keduanya adalah hal yang sama, sehingga seringkali menimbulkan jawaban yang salah saat proses wawancara.
Area heap dan metode Java adalah area data yang digunakan bersama oleh banyak thread. Dengan kata lain, beberapa thread mungkin dapat beroperasi pada data yang sama yang disimpan di heap atau area metode. Inilah yang sering kita sebut "java thread berkomunikasi melalui memori bersama".
Model memori Java diterjemahkan dari bahasa Inggris Java Memory Model (JMM). Faktanya, JMM tidak ada senyata struktur memori JVM. Itu hanya konsep abstrak. JSR-133: Model Memori Java dan Spesifikasi Thread menjelaskan bahwa JMM terkait dengan multi-threading. Ini menjelaskan serangkaian aturan atau spesifikasi. Spesifikasi ini mendefinisikan bahwa ketika satu thread menulis ke variabel bersama, maka thread tersebut dapat dilihat oleh thread lain .
Jadi, untuk meringkas secara singkat, multi-thread Java berkomunikasi melalui memori bersama, dan karena penggunaan memori bersama untuk komunikasi, akan ada serangkaian masalah seperti visibilitas, atomisitas, keteraturan, dll. selama proses komunikasi, dan JMM Ini adalah model yang dibangun berdasarkan komunikasi multi-utas dan serangkaian fitur yang terkait dengannya. JMM mendefinisikan beberapa kumpulan sintaksis, yang dipetakan ke kata kunci seperti volatil dan tersinkronisasi dalam bahasa Java.
Di atas adalah pengenalan model memori di Java. Artikel ini berfokus pada berbagi teori dasar. Anda dapat fokus membedakan jmm dan jvm, dan Anda dapat lebih memahami kedua konsep ini saat mempelajarinya di masa mendatang .