Ngoại trừ trình thu gom rác, những gì khác làm cho Java trở thành ngôn ngữ lập trình không theo thời gian thực


28

Ngoại trừ trình thu gom rác, một số tính năng khác trong Java khiến nó không phù hợp với lập trình thời gian thực là gì? Trên mạng, bất cứ khi nào Java và C ++ được thảo luận liên quan đến lập trình thời gian thực, nó luôn là trình thu gom rác được đề cập. Có gì khác?


4
Ngay cả việc thu gom rác cũng không thành vấn đề - có một số công cụ thu gom rác thời gian thực có sẵn. Những người đề cập đến gc như một điểm dừng chương trình trong thời gian thực chỉ đơn giản là không đủ năng lực.
SK-logic

2
@ SK-logic s / không đủ năng lực / không hiểu biết / g
Scott Whitlock

@ScottWhitlock, đồng ý, hầu hết trong số họ là. Nhưng một số (người có tiếng nói nhất) vẫn khăng khăng ngay cả sau khi được thông báo chính xác. Tôi không biết về bất kỳ lời giải thích hợp lý nào cho hiện tượng nhân học này.
SK-logic

Câu trả lời:


36

Có hai mục bổ sung tôi có thể nhớ tay:

  1. Biên soạn JIT
  2. Thực hiện luồng

Về mặt thời gian thực, khả năng dự đoán hiệu suất có lẽ là yếu tố quan trọng nhất; Đó là lý do tại sao một chu trình GC không thể đoán trước làm cho Java không phù hợp với thời gian thực.

JIT cung cấp các hiệu suất được cải thiện, nhưng sẽ khởi động vào một lúc nào đó sau khi chương trình đang chạy, lấy một số tài nguyên và thay đổi tốc độ thực hiện của hệ thống. Nó cũng có thể xảy ra một lần nữa ở giai đoạn sau, nếu VM tin rằng nó có thể thực hiện công việc "tốt hơn" tại thời điểm đó.

Theo như phân luồng: Tôi không nhớ rõ vào thời điểm này nếu đây là một phần của thiết kế ngôn ngữ hoặc chỉ là một triển khai rất phổ biến, nhưng Java thường không cung cấp công cụ nào để kiểm soát chính xác việc thực hiện luồng; Ví dụ, trong khi có 10 "ưu tiên" được chỉ định cho các luồng, thì không có yêu cầu nào VM thực sự xem xét các ưu tiên này. Các toán tử để dừng và chuyển đổi các luồng cũng không được xác định hoặc không được hệ thống tuân thủ chặt chẽ.

Có một số triển khai của JSR 1: Đặc tả thời gian thực cho Java - một đặc tả đã được phê duyệt vào năm 1998. Thông số kỹ thuật này giải quyết càng nhiều càng tốt các vấn đề khiến Java tiêu chuẩn không phù hợp với thời gian thực.

Có lẽ 5 năm trước, Sun (Bây giờ là Oracle) đã có RTSJ VM (Điều đó không bao giờ có tên, AFAIK); IBM đã có WebSphere Real Time; Và JamaicaVM là một giải pháp độc lập với nền tảng (?) Miễn phí. Googling những người ngày nay không mang lại nhiều.


Một vấn đề khác, mặc dù nhỏ so với, là một lớp chỉ được tải khi nó sẽ được sử dụng.
T-Bull

5
Không có gì trong đặc tả Java sẽ thực thi JIT thay vì AOT hoặc một cách hiểu thuần túy. Chủ đề màu xanh lá cây hoàn toàn có thể dự đoán được, vì vậy chúng cũng không thể là một trở ngại thời gian thực.
SK-logic

websphere thời gian thực ít nhất dường như vẫn được hỗ trợ (yêu cầu hỗ trợ Java 7.0 và bạn có thể truy cập một trang để mua nó)
jk.

@ SK-logic - đúng, điểm tốt!
aviv

33

Hệ điều hành

Miễn là Java chạy trên Unix hoặc Windows hoặc bất kỳ HĐH "thông thường" nào khác, thời gian thực không được đảm bảo.

Một hệ điều hành thời gian thực là bắt buộc để chạy các ứng dụng thời gian thực.


13
@Giorgio: để đảm bảo thời gian thực cứng? Vâng.
Joachim Sauer

5
Ngoài ra, có các hệ điều hành khả dụng được thiết kế cho Thời gian thực ngay từ đầu, ví dụ FreeRTOS.
medivh

4
Mặc dù đây là một điểm rất quan trọng đối với thời gian thực cứng nói chung, nhưng nó dường như không cụ thể về Java một chút nào. Tui bỏ lỡ điều gì vậy?

3
@delnan vấn đề là, ngay cả khi bạn sử dụng triển khai thời gian thực (ảo?) của máy ảo Java, nó sẽ không giúp ích nhiều nếu HĐH không thể cung cấp cho bạn các đảm bảo thời gian thực.
schlingel

3
@delnan - Câu hỏi có tiền đề sai, cho thấy C ++ là ngôn ngữ lập trình thời gian thực.
mouviciel

7

Về mặt kỹ thuật có thể có java thời gian thực (như nhận xét của SK-logic). tuy nhiên nó không phổ biến vì một số lý do phi kỹ thuật:

Tiêu chuẩn cũ

Gặp khó khăn khi tìm tài liệu tham khảo cho vấn đề này nhưng tôi chắc chắn tôi đã thấy các tiêu chuẩn an toàn hoặc tư vấn tuân thủ tiêu chuẩn an toàn, đã đưa ra lệnh cấm đối với Java. Đúng hoặc sai nếu bạn phải tuân thủ một cái gì đó nói rằng Java là verboten thì Java là Verboten.

Kỹ sư an toàn cũ

Ngay cả khi các tiêu chuẩn bạn cần phải làm việc để không cấm Java, thì làm việc với các kiểm toán viên An toàn / Chất lượng mà không có kinh nghiệm về Java sẽ có nghĩa là bạn không đi theo con đường ít kháng cự nhất. Bất cứ điều gì khác thường đối với kiểm toán viên có thể sẽ thu hút rất nhiều câu hỏi, điều này có nghĩa là rất nhiều công việc cho bạn biện minh cho sự lựa chọn của bạn.

Cộng đồng

tức là có rất nhiều phụ thuộc đường dẫn, hầu hết các chuyên gia thời gian thực hiện tại sẽ biết C ++, C hoặc ADA từ trong ra ngoài, vì vậy đây là một lựa chọn tự nhiên để thực hiện công việc mới.

(lưu ý: Tôi đã phần nào giới hạn thời gian thực và an toàn ở phần trên, đây là một vấn đề khác, trong đó thậm chí các tiêu chuẩn an toàn thường kết hợp cả hai)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.