Çöp toplayıcı dışında, Java'yı gerçek zamanlı olmayan bir programlama dili yapan başka bir şey var mı?


28

Çöp toplayıcı dışında, Java'da gerçek zamanlı programlama için uygun olmayan bazı diğer özellikler nelerdir? İnternette, Java vs C ++ ne zaman gerçek zamanlı programlama ile ilgili tartışılıyorsa, daima belirtilen çöp toplayıcıdır. Başka bir şey var mı?


4
Çöp toplama bile sorun değil - mevcut gerçek zamanlı çöp toplayıcıları vardır. Gc'yi gerçek zamanlı olarak bir gösteri durdurucusu olarak söyleyenler sadece yetersiz.
SK-mantık

2
@ SK-mantık s / yetersiz / bilgisiz / g
Scott Whitlock

@ScottWhitlock, çoğu kabul edildi. Ancak bazıları (en vokal) düzgün şekilde bilgilendirildikten sonra bile ısrar ediyor. Bu antropolojik fenomen için herhangi bir rasyonel açıklamanın farkında değilim.
SK-mantık

Yanıtlar:


36

Elden anımsayabileceğim iki ek madde var:

  1. JIT derlemesi
  2. Diş açma uygulaması

Gerçek zamanlı olarak, performansın tahmin edilebilirliği muhtemelen en önemli faktördür; Bu yüzden tahmin edilemeyen bir GC döngüsü Java'yı gerçek zamanlı olarak uygun kılmaz.

JIT gelişmiş performanslar sunar, ancak program çalıştıktan sonra bir noktada devreye girer, kaynakları alır ve sistemin yürütme hızını değiştirir. VM, o zaman "daha iyi" bir iş yapabileceğine inanıyorsa, daha sonraki bir aşamada tekrar olabilir.

Konuya gelince: Bu noktada, bu dil tasarımının bir parçası mı, yoksa sadece çok yaygın bir uygulama mı olduğunu tam olarak hatırlamıyorum, fakat Java genellikle iş parçacığı işlemini tam olarak kontrol etmek için hiçbir araç sağlamıyor; Örneğin, iş parçacığı için belirtilen 10 "öncelik" varken, VM'nin gerçekten bu öncelikleri dikkate almasına gerek yoktur. İpliklerin durdurulması ve anahtarlanması için operatörler de tanımlanmamış veya sistem tarafından katı bir şekilde yapıştırılmamıştır.

JSR 1'in çeşitli uygulamaları vardır : Java için Gerçek Zamanlı Belirtim - 1998'de onaylanmış bir özellik. Bu özellik, standart Java'yı gerçek zamanlı olarak uygun hale getiren sorunların çözümünü mümkün kılmaktadır.

Belki de 5 yıl önce Sun'ın (Şimdi Oracle) bir RTSJ VM'si vardı (Asla bir ismi yoktu, AFAIK); IBM'in WebSphere Real Time'ı vardı; Ve JamaicaVM ücretsiz (?), Platform bağımsız bir çözümdü. Bugünlerde googling yapmak pek bir şey ifade etmez.


Karşılaştırmada küçük de olsa bir diğer konu ise, bir sınıfın yalnızca kullanılacakken yüklenmesidir.
T-Bull

5
Java şartnamesinde AOT yerine JIT’i zorlayacak hiçbir şey yoktur veya salt bir yorum yoktur. Saf yeşil iplikler tamamen tahmin edilebilirdir, dolayısıyla gerçek zamanlı bir engel olamazlar.
SK-mantık

websphere gerçek zamanlı olarak en azından hala destekleniyor gibi görünüyor (Java 7.0 desteğini talep ediyor ve satın almak için bir sayfaya ulaşabilirsiniz)
jk.

@ SK-mantık - doğru, iyi nokta!
aviv

33

İsletim sistemi

Java, Unix veya Windows veya herhangi bir "normal" işletim sistemi üzerinde çalıştığı sürece, gerçek zamanlı garanti edilmez.

Gerçek zamanlı uygulamaları çalıştırmak için gerçek zamanlı bir işletim sistemi zorunludur.


13
@ Giorgio: zor gerçek zamanlı garantiler için? Evet.
Joachim Sauer

5
Ek olarak, başlangıçtan itibaren Gerçek Zamanlı için tasarlanmış işletim sistemleri vardır, örneğin FreeRTOS.
medivh

4
Bu, genel olarak zor gerçek zamanlı için çok önemli bir nokta olsa da, en küçük haliyle Java'ya özgü görünmemektedir. Bir şey mi eksik?

3
@delnan mesele şu ki, bir Java VM'nin (hayali?) gerçek zamanlı uygulamasını kullanıyor olsanız bile, işletim sistemi size gerçek zamanlı garanti veremiyorsa, bu pek yardımcı olmaz.
schlingel

3
@delnan - Sorunun sahte öncülleri var, bu da C ++ 'in gerçek zamanlı bir programlama dili olduğunu gösteriyor.
mouviciel

7

Teknik olarak, gerçek zamanlı java (SK-mantic'in yorumlarının önerdiği gibi) olması mümkün. ancak teknik olmayan sebeplerden dolayı yaygın değildir:

Eski standartlar

Bunun için referans bulmakta zorluk çekiyorum ama güvenlik standartlarını ya da güvenlik standartlarına uygunluk tavsiyelerini Java'ya battaniye yasağı koyduğumu biliyorum. Doğru ya da yanlış, Java'nın verboten olduğunu söyleyen bir şeye uymanız gerekiyorsa, o zaman Java Verboten'dır.

Eski güvenlik mühendisleri

Java'yı yasaklamaması için çalışmanız gereken standartlar olsa da, Java deneyimi olmayan Güvenlik / Kalite denetçileriyle çalışmak, en az direnç yolunu izlemeyeceğiniz anlamına gelir. Denetçi için olağan dışı olan herhangi bir şey, muhtemelen seçimlerinizi haklı çıkarmanız için çok fazla iş anlamına gelen birçok soruyu çekecektir.

Topluluk

yani, çok fazla yol bağımlılığı vardır, mevcut gerçek zamanlı uzmanların çoğu C ++, C veya ADA'yı tersyüz olarak bilir, bu nedenle yeni işler yapmak doğal bir seçenektir.

(not: Biraz önce gerçek zamanlı ve güvenli bir şekilde başka bir sorun olan, güvenlik standartlarının çoğu zaman ikisini bir araya getirdiği için bir araya geldim)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.