ฟิลด์อินสแตนซ์ (รวมถึงฟิลด์การสำรองคุณสมบัติ) รับสำเนา N สำหรับวัตถุ N
ฟิลด์แบบสแตติกได้รับสำเนาเดียวต่อคลาส
เมธอดคือบล็อกของ bytecode (หรือหลังจาก JIT บล็อกของคำสั่งพื้นฐาน) ซึ่งเป็นส่วนหนึ่งของโปรแกรม "อิมเมจ" หรือเซ็กเมนต์โค้ดที่ทำงานได้ วิธีการเป็นส่วนหนึ่งของอิมเมจโปรแกรมแล้วขณะที่มันอยู่บนดิสก์ เมื่อโหลดอิมเมจโดย OS (หรือ CLR) แล้วจะมีสำเนาวิธีใช้ร่วมกันหนึ่งชุด
พวกเขาไม่ได้เป็นส่วนหนึ่งของ "ฮีป" หรือการจัดสรรรันไทม์โดยทั่วไปยกเว้นในกรณีที่คุณอาจใช้คอมไพเลอร์โฮสต์ได้เพื่อรวบรวมวิธีการใหม่ได้ทันที วิธีการไม่ได้รับ "การปันส่วน" เช่นเดียวกับวัตถุและพวกมันไม่ใช่ "การจัดสรร" ที่สัมพันธ์กับการสร้างวัตถุ พวกมันมีอยู่เป็นส่วนหนึ่งของโปรแกรมก่อนที่วัตถุหนึ่งชิ้นจะถูกสร้างขึ้นทันที แม้แต่แกะ / ผู้ได้รับมอบหมายก็ไม่ได้ถูกจัดสรรในทันที คอมไพเลอร์สร้างคลาสตามความต้องการเพื่อใช้ออบเจ็กต์รหัสไดนามิกอื่น ๆ เหล่านี้และพวกมันยังมีอยู่เป็นส่วนหนึ่งของอิมเมจไบต์บนดิสก์
อัปเดตต่อความคิดเห็น:
มาตรฐาน JVM มีสิ่งนี้เพื่อพูดว่า:
2.5.4 พื้นที่วิธีการ
Java Virtual Machine มีพื้นที่เมธอดที่แบ่งใช้ระหว่างเธรด Java Virtual Machine ทั้งหมด พื้นที่เมธอดนั้นคล้ายคลึงกับพื้นที่เก็บข้อมูลสำหรับโค้ดที่คอมไพล์ของภาษาทั่วไปหรือคล้ายคลึงกับเซ็กเมนต์ "ข้อความ" ในกระบวนการของระบบปฏิบัติการ มันเก็บโครงสร้างต่อคลาสเช่นสระว่ายน้ำคงที่เวลาทำงานข้อมูลและวิธีการและรหัสสำหรับวิธีการและการก่อสร้างรวมถึงวิธีการพิเศษ (§2.9) ที่ใช้ในการเริ่มต้นเรียนและอินสแตนซ์และการเริ่มต้นอินเทอร์เฟซ
พื้นที่เมธอดถูกสร้างบนการเริ่มต้นเครื่องเสมือน แม้ว่าพื้นที่เมธอดนั้นเป็นส่วนหนึ่งของฮีปอย่างมีเหตุผลการใช้งานแบบง่ายอาจเลือกที่จะไม่เก็บขยะหรือทำให้กะทัดรัด ข้อกำหนดคุณลักษณะ Java Virtual Machine เวอร์ชันนี้ไม่ได้กำหนดตำแหน่งของพื้นที่เมธอดหรือนโยบายที่ใช้เพื่อจัดการโค้ดที่คอมไพล์ พื้นที่วิธีการอาจมีขนาดคงที่หรืออาจขยายได้ตามที่กำหนดโดยการคำนวณและอาจมีการทำสัญญาหากพื้นที่วิธีที่มีขนาดใหญ่กว่าไม่จำเป็น หน่วยความจำสำหรับพื้นที่เมธอดไม่จำเป็นต้องต่อเนื่องกัน
ดังนั้นจึงเป็นที่ชัดเจนว่า (1) ใช่สเป็คไม่ได้บอกว่าจะทำอย่างไร แต่ (2) มีความคล้ายคลึงกับพื้นที่จัดเก็บสำหรับโค้ดที่คอมไพล์ของภาษาดั้งเดิมเช่น ส่วนข้อความ นี่คือจุดที่ฉันทำ