ใช่สำหรับคำถามแรกและไม่ใช่สำหรับคำถามที่สอง มันเป็นเครื่องเสมือน ปัญหาของคุณอาจเกี่ยวข้องกับการเปลี่ยนแปลงที่ไม่ระบุในการใช้งานไลบรารีระหว่างเวอร์ชัน แม้ว่ามันอาจจะเป็นสภาพการแข่งขัน
มีห่วงบางอย่างที่ VM ต้องดำเนินการ การอ้างอิงโดยเฉพาะจะได้รับการปฏิบัติในไฟล์คลาสราวกับว่าพวกเขาใช้พื้นที่เดียวกับint
s บนสแต็ก double
และlong
ใช้ช่องอ้างอิงสองช่อง ตัวอย่างเช่นฟิลด์อินสแตนซ์มีการจัดเรียงใหม่บางอย่างที่ VM มักจะดำเนินการต่อไป ทั้งหมดนี้ทำได้ (ค่อนข้าง) โปร่งใส
นอกจากนี้ JVM แบบ 64 บิตบางตัวก็ใช้ "บีบอัด oops" เนื่องจากข้อมูลมีการจัดแนวให้อยู่รอบ ๆ ทุกๆ 8 หรือ 16 ไบต์ที่อยู่สามหรือสี่บิตจึงไร้ประโยชน์ (แม้ว่าบางอัลกอริทึมจะขโมย "เครื่องหมาย" บิตก็ตาม) สิ่งนี้ช่วยให้ข้อมูลแอดเดรส 32 บิต (ดังนั้นจึงใช้แบนด์วิดท์ครึ่งหนึ่งและเร็วกว่า) เพื่อใช้ขนาดฮีป 35- หรือ 36 บิตบนแพลตฟอร์ม 64 บิต