Java als number-cruncher?

Hi,

ich habe nicht viel Erfahrung mit Java, aber mein (vielleicht falscher) Eindruck ist, daß mit Java oft Oberflächen oder nur kleinere Berechnungen erstellt werden. Was ist aber mit stark CPU- und IO-lastigen Berechnungen, also z.B. die Verarbeitung von großen Dateien (~1GB), auf denen mathematische Operationen ausgeführt werden (z.B. Bildverarbeitung, Messdatenverarbeitung). Sollte man dafür doch noch auf C zurückgreifen?

Hat damit irgendjemand Erfahrungen?

Danke im Voraus!

Holger

CPU- und IO-lastigen Berechnungen, also z.B. die Verarbeitung
von großen Dateien (~1GB), auf denen mathematische Operationen
ausgeführt werden (z.B. Bildverarbeitung,
Messdatenverarbeitung). Sollte man dafür doch noch auf C
zurückgreifen?

Ja. JAVA ist recht langsam, was sich in Rekation zu einer schnellen Entwicklung verschmerzen lässt -
solange die Programme mit langsamen Usern interagieren müssen…

Diez

Hi,

ich habe nicht viel Erfahrung mit Java, aber mein (vielleicht
falscher) Eindruck ist, daß mit Java oft Oberflächen oder nur
kleinere Berechnungen erstellt werden.

jupp, und im Internet ist es dann meistens auch noch java-skript.

Was ist aber mit stark

CPU- und IO-lastigen Berechnungen, also z.B. die Verarbeitung
von großen Dateien (~1GB), auf denen mathematische Operationen
ausgeführt werden (z.B. Bildverarbeitung,
Messdatenverarbeitung). Sollte man dafür doch noch auf C
zurückgreifen?

wenns um „grosse“ Projekte geht die monatelange mehrer PC’s beschäftigen: JA benutz C.

wenns „nur“ um Messwertverarbeitung geht, (statitische Analyse, Darstellung) kann auch Java schnell genug sein. Allerdings hängt die Geschwindigkeit von java zu 99 % von der verwendeten JVM ab. zwischen SUN-JVM 1.3.0 und SUN-JVM 1.4.0 liegt z.b. der Faktor 2. Frag nicht nach den MS-versionen.

Ausserdem kann man mit dem Parameter „-server“ die JVM nochmals um einiges beschleunigen. (bei meinem aktuellen Projekt ergibt -server einen plus von etwa 40% Durchsatz, bei anderen Programmen ist es sinnlos.)

Ausserdem solltest du dir JNI ansehen. Damit kann man einzenle Methoden in anderen Sprachen implemtieren (ja, auch C und C++, Fortan.). Die rechenintensiven und HW-nahen Funktionen laufen dann native, die anderen Dinge (Netzwerk, GUI) in Java.

Als letzte Alternative gibts noch java-to-C Übersetzer. Im Vergleich zu den alten JVM’s haben die sehr geholfen, waren aber nicht immer stabil. Wie im Moment aussieht weis ich nicht.

Danke im Voraus!

np.

Wir verwenden Java in CPU- und IO-lastigen Anwendungen (Schwerpunkt aber mehr auf IO als auf CPU). C bringt dir immer noch einen Vorteil, aber bei einer gut getunten VM kann Java zumindest mit C++ annähernd mithalten.

Problem ist bei uns mehr der Speicher als die CPUs, da ist 1 GB pro CPU absolutes Minimum (das ist jetzt halt spezifisch auf unseren Anwendungsfall, schwer zu verallgemeinern).

Solange es sich nicht wirklich um Hochleistungsberechnungen handelt, sondern man sich die Mehrleistung die Java benötigt einfach in Form von ein paar CPUs mehr dazustecken kann, dann zahlt sich der Mehraufwand in der Hardware oft noch gegenüber dem Mehraufwand den die Entwicklung/Wartung eines C-Programmes gegenüber eines Java-Programmes bedeutet aus.

Zumindest ist das meine Erfahrung/Meinung, wäre natürlich interessant hier mal eine Diskussion zu dem Thema zu haben. :o)

Grüße, Robert