Saya sering mendengar pengembang menyebutkan bahwa Java tidak dapat " melakukan Real Time ", yang berarti aplikasi Java yang berjalan di Linux tidak dapat memenuhi persyaratan sistem waktu-nyata deterministik, seperti sesuatu yang berjalan di RIOT-OS, dll.
Saya mencoba memahami mengapa . Saya SWAG memberitahu saya bahwa ini mungkin sebagian besar disebabkan Sampah Jawa Collector, yang dapat dijalankan pada setiap saat dan benar-benar berhenti sistem. Dan meskipun ada yang disebut "GC yang tidak ada jeda" di luar sana, saya tidak perlu percaya iklan mereka, dan juga tidak memiliki $ 80K per JVM-contoh untuk membayar untuk proyek hobi!
Saya juga membaca artikel ini tentang menjalankan perangkat lunak drone di Linux . Dalam artikel itu, penulis menggambarkan sebuah skenario di mana Linux hampir menyebabkan drone menabrak mobilnya:
Saya belajar pelajaran sulit setelah memilih untuk melakukan loop kontrol level rendah (PID) pada Pi - mencoba menjadi pintar, saya memutuskan untuk meletakkan log write di tengah-tengah loop untuk debugging - quad awalnya terbang dengan baik tetapi kemudian Linux memutuskan untuk mengambil 2 detik untuk menulis satu entri log dan quad hampir menabrak mobil saya!
Sekarang walaupun penulis itu menulis perangkat lunak drone-nya di C ++, saya akan membayangkan aplikasi Java yang berjalan di Linux dapat mengalami nasib yang sama.
Menurut Wikipedia:
Suatu sistem dikatakan real-time jika kebenaran total operasi tidak hanya bergantung pada kebenaran logisnya, tetapi juga pada waktu di mana ia dilakukan.
Jadi bagi saya, ini berarti " Anda tidak memiliki waktu nyata jika kebenaran total memerlukan kebenaran dan ketepatan waktu yang logis. "
Mari kita berpura-pura telah menulis aplikasi Java untuk menjadi pemain super, dan bahwa saya telah "memeras lemon" untuk berbicara, dan itu tidak bisa ditulis (di Jawa) lebih cepat.
Semua dalam semua, pertanyaan saya adalah: Saya sedang mencari seseorang untuk menjelaskan kepada saya semua / sebagian besar alasan mengapa aplikasi Java yang menjalankan n Linux akan gagal menjadi "aplikasi waktu nyata". Artinya, apa saja kategori hal-hal pada tumpukan Java / Linux yang mencegahnya dari "tepat waktu", dan karena itu, menjadi " sepenuhnya benar "? Seperti disebutkan, sepertinya GC dan Linux log-flushing dapat menjeda eksekusi, tapi saya yakin ada lebih banyak hal di luar aplikasi Java itu sendiri yang akan menyebabkan waktu / kinerja buruk, dan menyebabkannya memenuhi batasan tenggat waktu yang sulit. Apakah mereka?