เมื่อพูดถึง memory ใน Java หลายๆ คนจะนึกถึง JVM โมเดลหน่วยความจำที่กล่าวถึงในบทความนี้ก็จะถูกเข้าใจผิดเช่นนี้เช่นกัน อันที่จริงนี่เป็นจุดทดสอบที่มีแนวโน้มที่จะทำผิดพลาดในการสัมภาษณ์ด้วย ตัวย่อของ memory model คือ jmm ฉันเชื่อว่าจะไม่สับสนง่าย ๆ หากแสดงเป็นชื่อภาษาอังกฤษ ด้านล่างนี้เราจะอธิบายแนวคิดของโมเดลหน่วยความจำ Java และช่วยคุณแยกแยะความแตกต่างจาก jvm
1. แนวคิด
Java Memory Model (Java Main Memory, JMM เรียกสั้น ๆ ) เป็นแนวคิดเชิงนามธรรมและมีความคล้ายคลึงกันหลายประการกับโมเดลหน่วยความจำคอมพิวเตอร์ JMM ประกอบด้วยเธรด หน่วยความจำในการทำงาน และหน่วยความจำหลักในการโต้ตอบเป็นหลัก หน่วยความจำในการทำงานสามารถเปรียบเทียบได้กับแคชของการคำนวณ แต่หน่วยความจำในการทำงานระหว่างเธรดนั้นไม่ขึ้นอยู่กับหน่วยความจำอื่น ๆ หน่วยความจำหลักจะคล้ายกับหน่วยความจำหลักของคอมพิวเตอร์ และการถ่ายโอนค่าตัวแปรระหว่างเธรดส่วนใหญ่จะกระทำผ่านหน่วยความจำหลัก ในเวลาเดียวกัน JMM ยังมีการเรียงลำดับคำสั่งใหม่เพื่อปรับลำดับการเรียกใช้โค้ดให้เหมาะสมที่สุด พูดง่ายๆ ก็คือลำดับในการเขียนโค้ดไม่จำเป็นต้องเป็นลำดับในการดำเนินการโค้ด
2. ความแตกต่างระหว่าง JMM และ JVM
โมเดลหน่วยความจำ Java มีลักษณะคล้ายกับโครงสร้างหน่วยความจำ Java (โครงสร้างหน่วยความจำ JVM) หลายๆ คนเข้าใจผิดว่าทั้งสองเป็นสิ่งเดียวกัน ซึ่งมักจะนำไปสู่คำตอบที่ไม่ถูกต้องในระหว่างกระบวนการสัมภาษณ์
พื้นที่ฮีป Java และวิธีการเป็นพื้นที่ข้อมูลที่ใช้ร่วมกันโดยหลายเธรด กล่าวอีกนัยหนึ่ง เธรดหลายตัวอาจสามารถดำเนินการกับข้อมูลเดียวกันที่จัดเก็บไว้ในฮีปหรือพื้นที่เมธอดได้ นี่คือสิ่งที่เรามักเรียกว่า "เธรด Java สื่อสารผ่านหน่วยความจำที่ใช้ร่วมกัน"
โมเดลหน่วยความจำ Java แปลจาก Java Memory Model (JMM) ภาษาอังกฤษ ในความเป็นจริง JMM ไม่มีอยู่จริงเท่ากับโครงสร้างหน่วยความจำ JVM มันเป็นเพียงแนวคิดที่เป็นนามธรรม JSR-133: Java Memory Model และ Thread Specification อธิบายว่า JMM เกี่ยวข้องกับ multi-threading โดยจะอธิบายชุดของกฎหรือข้อกำหนดเฉพาะ ข้อกำหนดนี้กำหนดว่าเมื่อเธรดหนึ่งเขียนไปยังตัวแปรที่แชร์ เธรดอื่นจะมองเห็นได้ .
ดังนั้น เพื่อสรุปโดยย่อ มัลติเธรดของ Java สื่อสารผ่านหน่วยความจำที่ใช้ร่วมกัน และเนื่องจากการใช้หน่วยความจำที่ใช้ร่วมกันเพื่อการสื่อสาร จะมีปัญหาหลายอย่าง เช่น การมองเห็น อะตอมมิกซิตี ลำดับ ฯลฯ ในระหว่างกระบวนการสื่อสาร และ JMM เป็นโมเดลที่สร้างขึ้นจากการสื่อสารแบบมัลติเธรดและชุดคุณลักษณะที่เกี่ยวข้อง JMM กำหนดชุดไวยากรณ์บางชุด ซึ่งแมปกับคีย์เวิร์ด เช่น ระเหยได้ และซิงโครไนซ์ในภาษา Java
ข้างต้นเป็นการแนะนำเกี่ยวกับโมเดลหน่วยความจำใน Java บทความนี้มุ่งเน้นไปที่การแบ่งปันทฤษฎีพื้นฐาน คุณสามารถมุ่งเน้นไปที่การแยกความแตกต่างระหว่าง jmm และ jvm และคุณสามารถมีความชัดเจนมากขึ้นเกี่ยวกับแนวคิดทั้งสองนี้เมื่อศึกษาใน อนาคต