ฉันไม่ทราบเหตุผลที่แท้จริงไม่มีส่วนเกี่ยวข้องใด ๆ ในการติดตั้ง JVM แต่ฉันสามารถนึกถึงเหตุผลที่น่าจะเป็นไปได้:
- แนวคิดของ Java คือการเป็นภาษาที่เขียนครั้งเดียวได้ทุกที่และการใส่สิ่งที่คอมไพล์ไว้ล่วงหน้าลงในไฟล์คลาสเป็นการละเมิด (เฉพาะ "ชนิด" เพราะแน่นอนว่าโค้ดไบต์จริงจะยังคงอยู่ที่นั่น)
- มันจะเพิ่มขนาดไฟล์คลาสเนื่องจากคุณจะมีโค้ดเดียวกันหลาย ๆ ครั้งโดยเฉพาะอย่างยิ่งถ้าคุณเกิดขึ้นเพื่อเรียกใช้โปรแกรมเดียวกันภายใต้ JVM ที่แตกต่างกันหลายตัว (ซึ่งไม่ใช่เรื่องแปลกจริงๆเมื่อคุณคิดว่าเวอร์ชันต่างๆเป็น JVM ที่แตกต่างกันซึ่งคุณ ต้องทำจริงๆ)
- ไฟล์คลาสเองอาจไม่สามารถเขียนได้ (แม้ว่าจะค่อนข้างง่ายในการตรวจสอบ)
- การเพิ่มประสิทธิภาพ JVM บางส่วนขึ้นอยู่กับข้อมูลรันไทม์และในการรันอื่น ๆ อาจไม่สามารถใช้ได้ (แม้ว่าจะยังคงให้ประโยชน์อยู่บ้างก็ตาม)
แต่ฉันเดาจริงๆและอย่างที่คุณเห็นฉันไม่คิดว่าเหตุผลของฉันคือตัวหยุดการแสดงที่แท้จริง ฉันคิดว่าซันไม่ถือว่าการสนับสนุนนี้เป็นสิ่งสำคัญและบางทีเหตุผลแรกของฉันก็ใกล้เคียงกับความจริงเนื่องจากการทำเช่นนี้เป็นนิสัยอาจทำให้ผู้คนคิดว่าไฟล์คลาส Java ต้องการเวอร์ชันแยกต่างหากสำหรับแต่ละ VM แทนที่จะเป็น ข้ามแพลตฟอร์ม
วิธีที่ฉันต้องการจริงๆคือการมีตัวแปล bytecode-to-native แยกต่างหากที่คุณสามารถใช้เพื่อทำสิ่งนี้ล่วงหน้าอย่างชัดเจนโดยสร้างไฟล์คลาสที่สร้างขึ้นอย่างชัดเจนสำหรับ VM เฉพาะโดยอาจมี bytecode ดั้งเดิมอยู่ในนั้นเพื่อให้คุณ สามารถทำงานกับ VM ที่แตกต่างกันได้เช่นกัน แต่นั่นอาจมาจากประสบการณ์ของฉัน: ฉันใช้ Java ME เป็นส่วนใหญ่ซึ่งมันเจ็บมากที่คอมไพเลอร์ Java ไม่ฉลาดกว่าในการคอมไพล์