ดังคำตอบอื่น ๆ อธิบายหน่วยความจำใน Java แบ่งออกเป็นสองส่วน
1. สแต็ก:หนึ่งสแต็กถูกสร้างขึ้นต่อเธรดและเก็บสแต็กเฟรมซึ่งเก็บตัวแปรโลคัลอีกครั้งและหากตัวแปรเป็นชนิดการอ้างอิงตัวแปรนั้นจะอ้างถึงตำแหน่งหน่วยความจำในฮีปสำหรับอ็อบเจ็กต์จริง
2. กอง:วัตถุทุกชนิดจะถูกสร้างขึ้นในฮีปเท่านั้น
หน่วยความจำฮีปแบ่งออกเป็น 3 ส่วนอีกครั้ง
1. หนุ่มรุ่น:ร้านค้าวัตถุซึ่งมีชีวิตสั้นหนุ่มรุ่นตัวเองสามารถแบ่งออกเป็นสองประเภทEden อวกาศและรอดชีวิตอวกาศ
2. รุ่นเก่า:จัดเก็บวัตถุที่รอดชีวิตจากรอบการเก็บขยะจำนวนมากและยังคงถูกอ้างอิง
3. การสร้างแบบถาวร: จัดเก็บข้อมูลเมตาเกี่ยวกับโปรแกรมเช่นพูลค่าคงที่รันไทม์
สตริงคงพูลเป็นของพื้นที่การสร้างถาวรของหน่วยความจำฮีป
เราสามารถดูพูลค่าคงที่รันไทม์สำหรับโค้ดของเราใน bytecode โดยใช้javap -verbose class_name
ซึ่งจะแสดงการอ้างอิงเมธอด (#Methodref) คลาสอ็อบเจกต์ (#Class) สตริงลิเทอรัล (#String)
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบทความของฉันJVM จัดการกับวิธีการโอเวอร์โหลดและการลบล้างภายในได้อย่างไร