คอมไพเลอร์ Java และ JVM เขียนด้วยภาษาใด?


196

Java compiler ( javac), virtual machine (JVM) และตัวjavaเขียนเริ่มต้นเป็นภาษาใด?


23
ฉันทำงานบน Java ดังนั้นฉันอยากรู้เกี่ยวกับภาษา ... :)
ราหุล Garg

26
มุมมองของคุณให้บอกว่าคุณทำงานกับเทคโนโลยีมา 20 ปีแล้วและผู้สัมภาษณ์ถามคุณว่ามันเขียนภาษาอะไรหรือมันทำงานอย่างไรคุณบอกได้เลยว่าคุณไม่สนใจมันหมายความว่าคุณแค่อยากเขียนถ้าไม่ใช่ภาษาที่ต้องการ เข้าใจภาษาจริงๆ
ราหุล Garg

22
และมากกว่านั้นฉันคิดว่าความรู้ไม่เคยสูญเปล่าดังนั้นการรู้ว่าบางสิ่งไม่เสียเวลา
ราหุล Garg

1
... วิศวกรเครื่องกลหรือนักขับรถแข่ง (เพื่อยืดอุปมาอุปมัย)
Epaga

2
@paxdiablo ขับรถเป็นสิ่งที่คุณทำ แต่ไม่ใช่อาชีพของคุณ คนขับรถแข่งอาจสนใจว่าเครื่องยนต์ทำงานอย่างไร ฉันไม่ได้บอกว่าพวกเขาใส่ใจ .. แต่ถ้าคนขับรถแข่งต้องการทราบเพิ่มเติมเกี่ยวกับวิธีการทำงานของเครื่องยนต์บนรถที่เขาจ่ายให้ขับรถคุณคิดว่ามันไม่มีเหตุผลหรือไม่?
JD Isaacks

คำตอบ:


173

การใช้ถ้อยคำที่แม่นยำของคำถามนั้นทำให้เข้าใจผิดเล็กน้อย: ไม่ใช่"JVM"หรือ"คอมไพเลอร์"เนื่องจากมีผู้ขาย JVM หลายราย (jrockit คือหนึ่ง IBM อีกคน) และคอมไพเลอร์หลายตัวที่นั่น

  • The Sun JVM จะเขียนในCแม้ว่านี้ไม่จำเป็นต้องเป็นกรณี - JVM ที่ขณะที่มันวิ่งบนเครื่องของคุณเป็นขึ้นอยู่กับแพลตฟอร์มปฏิบัติการและด้วยเหตุนี้อาจได้รับการเขียนในภาษาใด ๆ ตัวอย่างเช่น IBM JVM ดั้งเดิมเขียนด้วยSmalltalk

  • ชวาห้องสมุด ( java.lang, java.utilฯลฯ มักจะเรียกว่าชวา API ) จะตัวเองเขียนใน Java แม้ว่าวิธีการทำเครื่องหมายว่าnativeจะได้รับการเขียนในหรือCC++

  • ฉันเชื่อว่าคอมไพเลอร์ Java ของ Sun นั้นเขียนด้วยภาษาจาวาด้วย (แม้ว่าจะมีคอมไพเลอร์หลายตัวอยู่ก็ตาม)


ฉันคิดว่าเขาหมายถึง "java" โปรแกรมที่คุณใช้เพื่อเริ่ม JVM
สตีเฟ่น C

1
ที่จริงแล้วห้องสมุดหนึ่งแห่งใน JRE ของ Sun ถูกเขียนใน NetRexx (เป็นหนึ่งในไลบรารี่คณิตศาสตร์ที่มีความแม่นยำตามอำเภอใจไม่ว่าจะเป็น BigInteger, BigNum หรือ BigDecimal ฉันลืมอันใดอันหนึ่ง) ในทางทฤษฎีคุณสามารถใช้ภาษาใดก็ได้ในการใช้ JRE ตราบใดที่มันสามารถคอมไพล์แทนโปรแกรม Java ได้ เข้าใจ.
Jörg W Mittag

18
โปรดให้ข้อมูลอ้างอิงถึง Sun JVM ที่เขียนใน C.
Mohamed Bana เมื่อ

8
HotSpot JVM เขียนด้วย C ++ - www2.research.att.com/~bs/applications.html
devdimi

5
@devdimi ลิงก์เสียและตอนนี้อยู่ที่: stroustrup.com/applications.html
flup

81

คอมไพเลอร์ Java ตัวแรกได้รับการพัฒนาโดย Sun Microsystems และเขียนเป็น C โดยใช้ไลบรารีบางตัวจาก C ++ วันนี้คอมไพเลอร์ Java เขียนเป็น Java ขณะที่ JRE เขียนเป็น C

เราสามารถจินตนาการได้ว่าคอมไพเลอร์ Java เขียนใน Java เช่นนี้:

คอมไพเลอร์ Java ถูกเขียนเป็นโปรแกรม Java และคอมไพล์แล้วด้วยคอมไพเลอร์ Java ที่เขียนใน C (คอมไพเลอร์ Java ตัวแรก) ดังนั้นเราสามารถใช้คอมไพเลอร์ Java ที่คอมไพล์ใหม่ (เขียนเป็นภาษาจาวา) เพื่อคอมไพล์โปรแกรม Java


32
+1 สำหรับอธิบายวิธีการเรียบเรียง Java สามารถเขียนใน Java :)
เอดูอาร์ Luca

2
ขั้นตอนของการ "อัปเกรด" เป็นคอมไพเลอร์ใหม่โดยการคอมไพล์โค้ดในคอมไพเลอร์ขั้นพื้นฐานเพิ่มเติมเรียกว่า "bootstrapping" ในขณะที่ "ดึงตัวเองขึ้นมาจาก bootstraps" ซึ่งเป็นที่ที่ "บูท" มาจากเครื่อง Computerphile บน YouTube มีวิดีโอที่ดีเกี่ยวกับเรื่องนี้และ "ไดอะแกรม T"
iono

นั่นจะตอบปัญหาไก่และไข่ด้วยหรือไม่ :)
Skynet

@Skynet ไก่ที่ดูแลตัวเอง
sportzpikachu

65

จากJava Docs

คอมไพเลอร์เขียนใน Java และรันไทม์เขียนใน ANSI C


1
คอมไพเลอร์ Java ตัวแรกที่พัฒนาโดย Sun Microsystems ถูกเขียนใน C โดยใช้
ไลบรารี่

4
มันค่อนข้างจะเป็นเอกสารเก่า (> 10 ปีโดยดูจากสิ่งต่าง ๆ ) ยกตัวอย่างเช่นมันบอกว่า"Java bytecodes แปลได้ทันทีเพื่อแปลเป็นภาษาเครื่อง (แปล) และไม่ได้เก็บไว้ที่ไหน"ซึ่งไม่เป็นความจริงเป็นเวลาประมาณ 5 ปี!
oxbow_lakes

2
ทีนี้ตั้งแต่เมื่อใดที่มีเอกสารที่เป็นปัจจุบันโดยเฉพาะอย่างยิ่งหลังจากการเปลี่ยนแปลงครั้งใหญ่? :)
Esko

ดี - คำตอบนั้นไม่ถูกต้องจริงๆ Sun JVM เขียนด้วย C และคอมไพเลอร์ Sun java เขียนด้วย Java IBM JVM แรกถูกเขียนใน Smalltalk
oxbow_lakes

8
คอมไพล์ Java คืออะไร ชวา คุณจะรับ Java ได้อย่างไร รวบรวมมัน ฮะ?




3

Jikes RVM , JVM แบบโฮสติ้งด้วยตนเองที่ใช้อย่างกว้างขวางเพื่อวัตถุประสงค์ในการวิจัยเขียนใน Java ไม่ใช่คนที่ทำงานบนเดสก์ท็อปของพวกเขา แต่มันอยู่ที่นั่นในรายการ "ตอนนี้เรามาอวดพลังทั่วไปของภาษากันเถอะ"


มันเป็นเต่าตลอดทางเลยเหรอ? มันมี microkernel หรือไม่? ถ้าเป็นเช่นนั้นภาษาอะไรที่เขียนด้วย?
Raedwald

3

สมมติว่าคุณกำลังพูดถึง Hotspot JVM ซึ่งเป็น iirc ที่ Sun จัดทำขึ้นเป็นภาษา C ++ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเครื่องเสมือนต่างๆของ Java คุณสามารถตรวจสอบลิงค์นี้ javacเช่นเดียวกับคอมไพเลอร์ Java ส่วนใหญ่เขียนด้วยภาษา Java


0
  • เมื่อ Java ถูกนำเสนอโดย Sun Microsystem คอมไพเลอร์ java ถูกเขียนใน C โดยใช้ไลบรารีบางตัวจาก C ++
  • เนื่องจากมีแนวคิดในการออกแบบคอมไพเลอร์ที่เรียกว่า Bootstapping ส่วนใหญ่จะใช้ในการพัฒนาคอมไพเลอร์Bootstrappingเป็นกระบวนการของการเขียนคอมไพเลอร์ (หรือแอสเซมเบลอร์) ในภาษาการเขียนโปรแกรมต้นฉบับซึ่งมีวัตถุประสงค์เพื่อรวบรวม มันถูกใช้ในการผลิตคอมไพเลอร์โฮสติ้งด้วยตนเอง การพัฒนาคอมไพเลอร์สำหรับภาษาการเขียนโปรแกรมใหม่ได้รับการพัฒนาเป็นครั้งแรกในชุดภาษาที่มีอยู่แล้วทำการเขียนใหม่ในภาษาใหม่และเรียบเรียงโดยตัวมันเอง นั่นเป็นเหตุผลที่วันนี้, Java คอมไพเลอร์เขียนใน Java ตัวเอง
  • Java Virtual Machine: Java virtual machine เป็นเครื่องที่เป็นนามธรรม เช่นเดียวกับเครื่องคอมพิวเตอร์จริงมันมีชุดคำสั่งและจัดการพื้นที่หน่วยความจำต่างๆของเวลาทำงานโดยปกติ JVM ตีความรหัสไบต์เป็นรหัสเครื่อง

(สำหรับข้อมูลเพิ่มเติมคุณสามารถตรวจสอบลิงค์นี้: https://docs.oracle.com/javase/specs/jvms/se7/html/ )

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.