สำหรับการนำ Java ไปใช้งานอย่างเหมาะสม:
วัตถุแต่ละชิ้นมีส่วนหัวที่ประกอบด้วยตัวชี้ไปยังประเภทรันไทม์ (เช่นDouble
หรือString
แต่ไม่สามารถเป็นCharSequence
หรือAbstractList
) สมมติว่าคอมไพลเลอร์รันไทม์ (โดยทั่วไปคือ HotSpot ในกรณีของ Sun) ไม่สามารถกำหนดประเภทแบบคงที่ได้การตรวจสอบบางอย่างจำเป็นต้องดำเนินการโดยรหัสเครื่องที่สร้างขึ้น
ก่อนอื่นให้อ่านตัวชี้ไปยังประเภทรันไทม์ สิ่งนี้จำเป็นสำหรับการเรียกใช้เมธอดเสมือนในสถานการณ์ที่คล้ายกันอย่างไรก็ตาม
สำหรับการแคสต์ไปยังประเภทคลาสนั้นเป็นที่ทราบกันดีว่ามีซูเปอร์คลาสกี่คลาสจนกว่าคุณจะตี java.lang.Object
ดังนั้นจึงสามารถอ่านประเภทได้โดยใช้ค่าออฟเซ็ตคงที่จากตัวชี้ประเภท (จริงๆแล้วแปดตัวแรกใน HotSpot) อีกครั้งสิ่งนี้คล้ายคลึงกับการอ่านตัวชี้วิธีการสำหรับวิธีเสมือน
จากนั้นค่าที่อ่านได้ก็ต้องการการเปรียบเทียบกับประเภทคงที่ที่คาดไว้ของการร่าย ขึ้นอยู่กับสถาปัตยกรรมชุดคำสั่งคำสั่งอื่นจะต้องแยกสาขา (หรือข้อบกพร่อง) ในสาขาที่ไม่ถูกต้อง ISAs เช่น ARM 32 บิตมีคำสั่งตามเงื่อนไขและอาจสามารถให้เส้นทางเศร้าผ่านเส้นทางแห่งความสุขได้
อินเทอร์เฟซยากขึ้นเนื่องจากการสืบทอดอินเทอร์เฟซหลายรายการ โดยทั่วไปสอง casts ไปยังอินเทอร์เฟซล่าสุดจะถูกแคชไว้ในประเภทรันไทม์ ในช่วงแรก ๆ (กว่าทศวรรษที่แล้ว) อินเทอร์เฟซค่อนข้างช้า แต่ก็ไม่เกี่ยวข้องอีกต่อไป
หวังว่าคุณจะเห็นว่าสิ่งเหล่านี้ไม่เกี่ยวข้องกับประสิทธิภาพเป็นส่วนใหญ่ ซอร์สโค้ดของคุณสำคัญกว่า ในแง่ของประสิทธิภาพการโจมตีที่ยิ่งใหญ่ที่สุดในสถานการณ์ของคุณอาจเป็นเพราะแคชพลาดจากการไล่ตามตัวชี้วัตถุไปทั่วทุกที่ (แน่นอนว่าข้อมูลประเภทจะเป็นเรื่องธรรมดา)