ยกเว้นตัวรวบรวมขยะสิ่งอื่นใดที่ทำให้ Java เป็นภาษาการเขียนโปรแกรมที่ไม่ใช่แบบเรียลไทม์


28

ยกเว้นตัวรวบรวมขยะคุณสมบัติอื่น ๆ ของ Java ที่ไม่เหมาะสมสำหรับการเขียนโปรแกรมแบบเรียลไทม์คืออะไร บนเน็ตทุกครั้งที่มีการพูดถึง Java vs C ++ เกี่ยวกับการเขียนโปรแกรมแบบเรียลไทม์มันจะเป็นตัวรวบรวมขยะที่กล่าวถึงเสมอ มีอะไรอีกไหม?


4
แม้แต่การรวบรวมขยะไม่ใช่ปัญหา - มีตัวรวบรวมขยะแบบเรียลไทม์หลายตัว ผู้ที่พูดถึง gc ว่าเป็นตัวหยุดแสดงตามเวลาจริงนั้นไร้ความสามารถ
SK-logic

2
@ SK-logic s / ไร้ความสามารถ / uninformed / g
Scott Whitlock

@ScottWhitlock เห็นด้วยส่วนใหญ่เป็น แต่นักร้องบางคนก็ยังยืนยันแม้ว่าจะได้รับแจ้งอย่างถูกต้องแล้วก็ตาม ฉันไม่ได้ตระหนักถึงคำอธิบายเหตุผลสำหรับปรากฏการณ์มานุษยวิทยานี้
SK-logic

คำตอบ:


36

มีอีกสองรายการที่ฉันจำได้ไม่ทัน:

  1. การรวบรวม JIT
  2. การใช้เธรด

ในแง่ของเรียลไทม์การคาดการณ์ประสิทธิภาพเป็นปัจจัยที่สำคัญที่สุด นั่นเป็นเหตุผลที่วัฏจักร GC ที่ไม่สามารถคาดการณ์ได้ทำให้ Java ไม่เหมาะสมกับเวลาจริง

JIT นำเสนอการแสดงที่ดีขึ้น แต่เริ่มทำงานในบางจุดหลังจากที่โปรแกรมกำลังทำงานใช้ทรัพยากรบางอย่างและเปลี่ยนความเร็วการดำเนินการของระบบ นอกจากนี้ยังสามารถเกิดขึ้นอีกครั้งในภายหลังหาก VM เชื่อว่าสามารถทำงานได้ดีขึ้นในเวลานั้น

เท่าที่เธรด: ฉันไม่จำจุดนี้ถ้าเป็นส่วนหนึ่งของการออกแบบภาษาหรือเพียงการใช้งานทั่วไป แต่ Java มักจะไม่มีเครื่องมือในการควบคุมการดำเนินการเธรดอย่างแม่นยำ; ตัวอย่างเช่นในขณะที่มี 10 "ลำดับความสำคัญ" ที่ระบุไว้สำหรับหัวข้อไม่มีความต้องการที่ VM จะพิจารณาลำดับความสำคัญเหล่านี้ ตัวดำเนินการสำหรับการหยุดและการสลับเธรดไม่ได้ถูกกำหนดเช่นกันหรือไม่ยึดติดกับระบบอย่างเคร่งครัด

มีการนำไปใช้งานหลายอย่างของJSR 1: ข้อมูลจำเพาะตามเวลาจริงสำหรับ Java - ข้อมูลจำเพาะที่ได้รับการอนุมัติในปี 1998 ข้อมูลจำเพาะนี้ระบุถึงปัญหาที่ทำให้ Java มาตรฐานไม่เหมาะสมแบบเรียลไทม์

เมื่อประมาณ 5 ปีที่แล้วซัน (ตอนนี้ Oracle) มี RTSJ VM (ที่ไม่เคยมีชื่อ AFAIK) IBM มี WebSphere แบบเรียลไทม์ และ JamaicaVM นั้นเป็นโซลูชันที่ไม่ขึ้นกับแพลตฟอร์ม Google ในวันนี้ไม่ได้นำมาซึ่งมากนัก


ปัญหาอีกประการหนึ่งแม้ว่าจะมีขนาดเล็กเมื่อเปรียบเทียบก็คือชั้นจะโหลดเมื่อมันจะถูกใช้
T-Bull

5
ไม่มีอะไรในข้อกำหนดของจาวาที่จะบังคับใช้ JIT แทนที่จะเป็น AOT หรือการตีความที่บริสุทธิ์ ด้ายสีเขียวบริสุทธิ์สามารถคาดเดาได้ทั้งหมดดังนั้นพวกเขาจึงไม่สามารถเป็นอุปสรรคแบบเรียลไทม์ได้
SK-logic

websphere เรียลไทม์อย่างน้อยก็ดูเหมือนว่าจะได้รับการสนับสนุน (อ้างว่าสนับสนุน Java 7.0 และคุณสามารถไปที่หน้าเพื่อซื้อ)
jk

@ SK-logic - ถูกต้องจุดดี!
aviv

33

ระบบปฏิบัติการ

ตราบใดที่ Java ทำงานบน Unix หรือ Windows หรือระบบปฏิบัติการ "ปกติ" อื่น ๆ ระบบจะไม่รับประกันเรียลไทม์

ระบบปฏิบัติการตามเวลาจริงเป็นสิ่งจำเป็นสำหรับการเรียกใช้แอปพลิเคชันตามเวลาจริง


13
@Giorgio: สำหรับการรับประกันเรียลไทม์ยาก? ใช่.
โจอาคิมซาวเออร์

5
นอกจากนี้ยังมีระบบปฏิบัติการที่ออกแบบมาสำหรับ Real Time ตั้งแต่เริ่มต้นเช่น FreeRTOS
medivh

4
แม้ว่านี่จะเป็นจุดที่สำคัญมากสำหรับเวลาจริงโดยทั่วไป แต่ก็ไม่ได้ระบุว่ามีจาวาเฉพาะเจาะจง ฉันพลาดอะไรไปรึเปล่า?

3
@delnan ประเด็นคือแม้ว่าคุณจะใช้ (จินตภาพ?) การนำ Java VM ไปใช้แบบเรียลไทม์ก็ไม่ได้ช่วยอะไรมากหากระบบปฏิบัติการไม่สามารถรับประกันการใช้งานแบบเรียลไทม์ได้
schlingel

3
@delnan - คำถามมีข้อผิดพลาดที่เป็นเท็จแนะนำว่า C ++ เป็นภาษาการเขียนโปรแกรมแบบเรียลไทม์
mouviciel

7

ในทางเทคนิคเป็นไปได้ที่จะมี java แบบเรียลไทม์ (ตามความเห็นของ SK-logic แนะนำ) อย่างไรก็ตามมันไม่ใช่เรื่องธรรมดาสำหรับเหตุผลที่ไม่ใช่ด้านเทคนิค:

มาตรฐานเก่า

มีปัญหาในการค้นหาข้อมูลอ้างอิงสำหรับเรื่องนี้ แต่ฉันมั่นใจว่าฉันเคยเห็นมาตรฐานความปลอดภัยหรือคำแนะนำเกี่ยวกับความปลอดภัยตามมาตรฐานแล้ววางคำสั่งห้ามบน Java ถูกหรือผิดถ้าคุณต้องปฏิบัติตามสิ่งที่บอกว่า Java เป็น verboten Java นั้นเป็น Verboten

วิศวกรความปลอดภัยเก่า

แม้ว่ามาตรฐานที่คุณต้องทำงานเพื่อห้ามแบน Java การทำงานกับผู้ตรวจสอบด้านความปลอดภัย / คุณภาพโดยปราศจากประสบการณ์ของ Java จะช่วยให้คุณไม่ต้องติดตามเส้นทางที่มีการต่อต้านน้อยที่สุด สิ่งใดที่ไม่ธรรมดาสำหรับผู้สอบบัญชีจะดึงดูดคำถามมากมายซึ่งหมายความว่างานจำนวนมากสำหรับคุณที่จะพิสูจน์ตัวเลือกของคุณ

ชุมชน

กล่าวคือมีการพึ่งพาเส้นทางจำนวนมากผู้เชี่ยวชาญด้านเรียลไทม์ในปัจจุบันส่วนใหญ่จะรู้ว่า C ++, C หรือ ADA เป็นสิ่งที่อยู่ภายในดังนั้นจึงเป็นทางเลือกที่เป็นธรรมชาติในการทำงานใหม่

(หมายเหตุ: ฉันได้พูดคุยแบบเรียลไทม์และความปลอดภัยในด้านบนซึ่งค่อนข้างเป็นปัญหาอีกแบบหนึ่งซึ่งแม้มาตรฐานความปลอดภัยมักจะทำให้ทั้งสองแช็ทกัน)

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