Kecuali pengumpul sampah, apa lagi yang menjadikan Java sebagai bahasa pemrograman non-waktu nyata

28

Selain pengumpul sampah, fitur apa saja di Jawa yang membuatnya tidak cocok untuk pemrograman waktu nyata? Di internet, setiap kali Java vs C ++ didiskusikan sehubungan dengan pemrograman waktu nyata, selalu ada pemulung yang disebutkan. Apakah ada hal lain?

Kaushik
sumber
4
Bahkan pengumpulan sampah tidak menjadi masalah - ada beberapa pengumpul sampah real time yang sulit tersedia. Mereka yang menyebut gc sebagai penghenti waktu nyata sangat tidak kompeten.
SK-logic
2
@ SK-logika s / tidak kompeten / kurang informasi / g
Scott Whitlock
@ScottWhitlock, setuju, kebanyakan dari mereka. Tetapi beberapa (yang paling vokal) tetap bersikeras bahkan setelah diberi informasi dengan benar. Saya tidak mengetahui adanya penjelasan rasional untuk fenomena antropologis ini.
SK-logic

Jawaban:

36

Ada dua item tambahan yang bisa saya ingat begitu saja:

  1. Kompilasi JIT
  2. Implementasi Threading

Dalam hal waktu nyata, prediktabilitas kinerja mungkin merupakan faktor terpenting; Itu sebabnya siklus GC yang tidak dapat diprediksi membuat Java tidak cocok untuk waktu-nyata.

JIT menawarkan kinerja yang lebih baik, tetapi muncul di beberapa titik setelah program berjalan, mengambil beberapa sumber daya, dan mengubah kecepatan eksekusi sistem. Ini juga dapat terjadi lagi pada tahap selanjutnya, jika VM percaya dapat melakukan pekerjaan yang "lebih baik" pada saat itu.

Sejauh threading: Saya tidak begitu ingat pada saat ini jika ini adalah bagian dari desain bahasa, atau hanya implementasi yang sangat umum, tetapi Java biasanya tidak menyediakan alat untuk secara tepat mengontrol eksekusi thread; Misalnya, sementara ada 10 "prioritas" yang ditentukan untuk utas, tidak ada persyaratan bahwa VM benar-benar mempertimbangkan prioritas ini. Operator untuk menghentikan dan mengalihkan utas juga tidak ditentukan, atau tidak dipatuhi dengan kaku oleh sistem.

Ada beberapa implementasi JSR 1: Spesifikasi Real-time untuk Java - spesifikasi yang telah disetujui pada tahun 1998. Spesifikasi ini membahas sebanyak mungkin masalah yang membuat Java standar tidak cocok untuk waktu-nyata.

Pada mungkin 5 tahun yang lalu, Sun (Sekarang Oracle) memiliki RTSJ VM (Itu tidak pernah memiliki nama, AFAIK); IBM memiliki WebSphere Real Time; Dan JamaicaVM adalah solusi platform-independen gratis (?). Googling hari ini tidak banyak menghasilkan.

aviv
sumber
Masalah lain, meskipun kecil dalam perbandingan, adalah bahwa sebuah kelas hanya dimuat ketika akan digunakan.
T-Bull
5
Tidak ada dalam spesifikasi Java yang akan menegakkan JIT alih-alih AOT atau interpretasi murni. Thread hijau murni benar-benar dapat diprediksi, sehingga mereka juga tidak bisa menjadi penghambat waktu nyata.
SK-logic
websphere real time setidaknya masih nampaknya didukung (mengklaim dukungan Java 7.0 dan Anda dapat membuka halaman untuk membelinya)
jk.
@ SK-logic - benar, poin bagus!
aviv
33

Sistem operasi

Selama Java berjalan di atas Unix atau Windows atau OS "reguler" lainnya, realtime tidak dijamin.

OS waktu nyata adalah wajib untuk menjalankan aplikasi waktu nyata.

mouviciel
sumber
13
@Iorgio: untuk jaminan realtime yang sulit? Iya nih.
Joachim Sauer
5
Selain itu, ada sistem operasi yang tersedia yang dirancang untuk Real Time sejak awal, misalnya FreeRTOS.
medivh
4
Meskipun ini adalah poin yang sangat penting untuk waktu nyata yang sulit secara umum, ini tidak tampak spesifik untuk Java sedikitpun. Apakah saya melewatkan sesuatu?
3
@delnan intinya adalah, bahkan jika Anda menggunakan implementasi Java imajiner (imajiner?) tidak banyak membantu jika OS tidak dapat memberikan jaminan waktu nyata.
schlingel
3
@delnan - Pertanyaan memiliki premis yang salah, menunjukkan bahwa C ++ adalah bahasa pemrograman waktu nyata.
mouviciel
7

Secara teknis dimungkinkan untuk memiliki java waktu nyata (seperti komentar SK-logika menyarankan). namun itu tidak umum karena sejumlah alasan non-teknis:

Standar lama

Kesulitan menemukan referensi untuk ini, tetapi saya yakin saya telah melihat standar keselamatan, atau saran kesesuaian standar keselamatan, memberlakukan larangan total terhadap Jawa. Benar atau salah jika Anda harus menyesuaikan diri dengan sesuatu yang mengatakan Java adalah verboten maka Java adalah Verboten.

Insinyur keamanan lama

Sekalipun standar yang Anda butuhkan untuk bekerja tidak melarang Java, bekerja dengan auditor Keselamatan / Kualitas tanpa pengalaman Java akan sangat berarti Anda tidak mengikuti jalan yang paling tidak resistan. Apa pun yang tidak biasa bagi auditor kemungkinan akan menarik banyak pertanyaan yang pada gilirannya berarti banyak pekerjaan untuk Anda membenarkan pilihan Anda.

Komunitas

yaitu ada banyak ketergantungan jalur, sebagian besar pakar real time saat ini akan mengetahui C ++, C atau ADA dalam ke luar sehingga merupakan pilihan alami untuk melakukan pekerjaan baru di.

(catatan: Saya agak menyatukan waktu nyata dan keselamatan di atas, yang merupakan masalah lain, bahkan standar keselamatan sering mengacaukan keduanya)

jk.
sumber