Forum: PC-Programmierung "Systemnahes" Programmieren in Java


von mr.chip (Gast)


Lesenswert?

Hallo

Ich arbeite derzeit an einer Java-Applikation für ein Mobilgerät, wo es 
auf hohe Performance ankommt. Da dringt natürlich sofort die 
resourcenschonende, prozessornahe Denkweise durch, wie man sie auf 
Mikrocontrollern lernt.

Unter anderem habe ich zahlreiche Bitmanipulationen auf Integern, die 
extrem oft und schnell durchgeführt werden müssen. Weiterhin werden 
Daten so speicherschonend wie möglich abgelegt, d.h., jeweils im 
kleinstmöglichen Datentyp. Weiterhin werde ich massenweise in der Gegend 
herumpointern (verkettete Listen/Binärbäume).

Was mich nun interessiert: Was macht Java daraus? Werden diese 
Bitmanipulationen ähnlich wie bei einem nativen Programm in wenigen 
Prozessorzyklen ausgeführt? Belegen die kleineren Datentypen tatsächlich 
nur den benötigten Speicherplatz? Oder bauscht Java gnadenlos auf?

Mir ist klar, dass man mit Java nie ganz an C herankommen wird, aber es 
interessiert mich halt, ob sich eine prozessornahe Denkweise überhaupt 
lohnt.

Gruss
Michael

von Klugscheisser (Gast)


Lesenswert?

Mag sein, das es da mehr als einen sinnvollen Standpunkt gibt, aber ich 
würde sagen, das Java und systemnahe Programmierung nicht zusammengehen. 
Ja, ich würde sogar soweit gehen, das als Paradebeispiel für eine 
Unmöglichkeit zu bezeichnen. So wie niedrige 8000m Berge.

Was benutzt Du für eine Java-Implementierung?

Im allgemeinen wird ein Zwischencode erzeugt, der dann von einer Java 
Virtual Machine interpretiert wird. Das ist schon per Definition 
langsamer und entfernt von der Hardware.

Es mag aber sein, das es Java-Compiler gibt die Maschinencode erzeugen. 
Kenne nur keine.

von mr.chip (Gast)


Lesenswert?

> Mag sein, das es da mehr als einen sinnvollen Standpunkt gibt, aber ich
> würde sagen, das Java und systemnahe Programmierung nicht zusammengehen.

Naja, das ist doch eine insgesamt sehr allgemeine Antwort, wie man sie 
in jedem zweiten Java-Thread zu lesen bekommt. Mich interessieren 
wirklich die ganz konkreten Fragen und Details.

von ... (Gast)


Lesenswert?

>Im allgemeinen wird ein Zwischencode erzeugt, der dann von einer Java
>Virtual Machine interpretiert wird. Das ist schon per Definition
>langsamer und entfernt von der Hardware.

hui

also wenn schon klugscheissen, dann richtig!
lies nochmal ganz gründlich nach :D

tipp was nicht passt:
zwischencode; Virtual Machine "interpretiert"

scheint du hast ein paar dinge schlicht unvollständig gelesen und hast 
somit einabsolut verfälschtes bild
tipp: basic zum beispiel wäre interpretiert...

mach deine hausaufgaben besser! dein halbwissen ist exzellent...


@mr. chip:

stichwort: JNI

java native interface

beispiel anhand c: zeitkritische elemente, die man nicht dem compiler 
überlassen möchte realisiert man bei c-projekten in assembler

...in java kannst du dir über JNI eigene APIs in c bzw. c mit 
inlineassembler realisieren... das ist was du suchst

damit gibst du jedoch die plattformunabhängigkeit auf, es sei denn, du 
compilierst deine eigene API jeweils auf den unterstützten systemen...

von Klugscheisser (Gast)


Lesenswert?

@ ...

:-)

von mr.chip (Gast)


Lesenswert?

> ...in java kannst du dir über JNI eigene APIs in c bzw. c mit
> inlineassembler realisieren... das ist was du suchst

Leider nicht in J2ME. Und, wie erwähnt, mit der Plattformunabhängigkeit 
bzw. der einfachen Portierbarkeit ist's dann auch hin. Dann kann ich 
gleich alles in C schreiben.

von zwieblum (Gast)


Lesenswert?

@ ... na dann sag' mal was die vm macht, interessiert mich nämlich 
brennend. und dann erklär' mir bitte den unterschied zu c64 basic (nicht 
den sch.. mit "sicherheit" und co, sinder den teil mit "interpretiert")

von Klugscheisser (Gast)


Lesenswert?

@ zwieblum

... will doch bloss trollen.

Interpretieren oder compilieren ist eigentlich der grosse Unterschied.

Wenn man eine interpretierende VM (z.B. NanoVM) nimmt, dann 
interpretiert die eben. Führt also jeden Bytecode aus, in dem sie die 
Wirkungen erzeugt.

Andere VMs kompilieren beim Start Codeabschnitte des Bytecodes 
(Zwischencodes) und führen den compilierten Code aus.

Wieder andere VM führen den Zwischencode aus. Man könnte streiten ob das 
interpretation ist. Jedenfalls ist es keine Compilation.

Bei FORTH z.B. finde ich die Begrifflichkeiten nicht unbedingt klar. Es 
wird nicht kompiliert, aber bei den Low-Level-Worten wird Code 
ausgeführt, der vorher kompiliert wurde.

von ... (Gast)


Lesenswert?

>... will doch bloss trollen.

:D meistens funktionierts :D
...klar, kann man sagen das java interpretiert wird.
im detail habe ich jedoch noch gelernt, das "interpretierte" sprachen, 
den programmcode erst zur programmlaufzeit parsen und -interpretieren-
das der bytecode von java auf einer softwareemulierten maschine 
schneller ist als "interprtiert" lauft ist wohl klar, (genauso klar, das 
nativer code schneller ist als java...)


wollte nur JNI vorschlagen, schade das es nicht j2me geht...

von Peter (Gast)


Lesenswert?

ich denke mal hier fehlen ein paar Beispiele.

Bei java kann ja bis auf die primitiven datentype jeder Variable null 
sein, das muss also auch irgendwo gespeichert und geprüft werden. Dann 
soweit ich weiss mach java auch overflow checks die auch zeit und 
resourcen kosten.

Leider ist man dann immer doch von der VM Abhängig, jeder version kann 
sich anders bezüglich optimierung verhalten.
Aber ich glaube bei java muss man nicht so sehr viel versuchen dem 
compieler zu helfen guten code zu erzeugen, die VM Optimiert schon sehr 
gut.

Wie pointers du in java rum, in java sind es doch eh alles Referenzen?

von Johnny (Gast)


Lesenswert?

> scheint du hast ein paar dinge schlicht unvollständig gelesen und hast
> somit einabsolut verfälschtes bild
> tipp: basic zum beispiel wäre interpretiert...
> mach deine hausaufgaben besser! dein halbwissen ist exzellent...

Mach mal Deine Hausaufgaben selbst, BASIC kann je nach Tool auch 
kompiliert werden. Siehe z.B. QBX, mit welchem eine schöne Exe gemacht 
werden kann. Sogar Visual Basic mit .NET wird kompiliert (just in time) 
und nicht interpretiert.

von ... (Gast)


Lesenswert?

:D funzt doch

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

mr.chip wrote:
>> Mag sein, das es da mehr als einen sinnvollen Standpunkt gibt, aber ich
>> würde sagen, das Java und systemnahe Programmierung nicht zusammengehen.
>
> Naja, das ist doch eine insgesamt sehr allgemeine Antwort, wie man sie
> in jedem zweiten Java-Thread zu lesen bekommt. Mich interessieren
> wirklich die ganz konkreten Fragen und Details.
Also bitmanipulationen gehen recht schnell.
Was datentypen angeht: Der kleinste Datentyp den java kennt ist 32bit.
double und long belegen 64bit. Kleinere Datentypen (short, byte und 
boolean) werden intern meistens auf 32bit abgebildet (meistens deshab da 
das von der VM abhängen KANN). Näheres kann dir da die VM Spezifikation 
sagen wenn du dich da einlesen magst, ist eigentlich eine ganz 
interessante Lektüre. Die genaue Umsetzung der Operatione hängt 
natürlich von der verwendeten VM ab, JNI ist wie schon erwähnt eine 
Möglichkeit java an Systemfunktionen zu binden die normalerweise nicht 
zugriffsfähig sind.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Klugscheisser wrote:

> Im allgemeinen wird ein Zwischencode erzeugt, der dann von einer Java
> Virtual Machine interpretiert wird. Das ist schon per Definition
> langsamer und entfernt von der Hardware.

Es wird P-Code erzeugt, das ist richtig. Aber moderne 
JVM-Implementierungen nutzen JIT-Compiling und Profiling. Die Aussage 
ist so also so nicht ganz richtig. Aber "systemnah" ist schon deswegen 
nicht moeglich, weil man in Java nur die VM sieht. Und die VM hat ihre 
eigene Architektur! Da wird es schon schwierig (bis unmoeglich), wenn 
man Prozesse ausserhalb der VM manipulieren will, da dies 
OS-spezifisches Vorgehen benoetigt.

Michael

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

mr.chip wrote:

Dir geht es also um effizientes Java...

> Unter anderem habe ich zahlreiche Bitmanipulationen auf Integern, die
> extrem oft und schnell durchgeführt werden müssen.

Ja, und?

> Weiterhin werden
> Daten so speicherschonend wie möglich abgelegt, d.h., jeweils im
> kleinstmöglichen Datentyp. Weiterhin werde ich massenweise in der Gegend
> herumpointern (verkettete Listen/Binärbäume).

Es gibt keine Pointer in Java.

> Was mich nun interessiert: Was macht Java daraus? Werden diese
> Bitmanipulationen ähnlich wie bei einem nativen Programm in wenigen
> Prozessorzyklen ausgeführt? Belegen die kleineren Datentypen tatsächlich
> nur den benötigten Speicherplatz? Oder bauscht Java gnadenlos auf?

Wenn Du diese Details wissen willst schaust Du Dir die 
Architekturbeschreibung der verwendeten JVM an. Ausserdem sind dort noch 
plattform- und OS-spezifische Unterschiede zu verzeichnen.

> Mir ist klar, dass man mit Java nie ganz an C herankommen wird, aber es
> interessiert mich halt, ob sich eine prozessornahe Denkweise überhaupt
> lohnt.

Nein, da Du den Prozessor nicht siehst und nicht die 
Implementierungsdetails der VM kennst. Selbst wenn Du sie kennen 
wuerdest, koenntest Du Dich nicht darauf verlassen, dass sie in diesem 
Zustand bleiben. Das ist der Grundgedanke von Abstraktion.

von mr.chip (Gast)


Lesenswert?

> JVM-Implementierungen nutzen JIT-Compiling und Profiling. Die Aussage
> ist so also so nicht ganz richtig. Aber "systemnah" ist schon deswegen
> nicht moeglich, weil man in Java nur die VM sieht.

Jein. Wie du richtig sagst, gibt es den JIT - und der baut eben nativen 
Maschinencode. Wenn Java es richtig erkennt - und das ist im Prinzip das 
wesentliche meiner Frage - könnten dadurch bitweise Operationen 
praktisch mit nativer Geschwindigkeit abgearbeitet werden.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Die VM braucht immer Overhead, aber primitive Operationen werden auch 
nicht in komplexe auf der Zielarchitektur uebersetzt. Der Grundsatz: 
Einfacher (bzw. Hardware-Befehl vorhanden) ist schneller, zaehlt auch 
hier. Sofern natuerlich der Zielprozessor entsprechende Befehle 
unterstuetzt. Wenn Du wirklich wissen willst, wie schnell Deine SW 
ausgefuehrt wird und ob Beschleunigung durch JIT durchgefuehrt wird: Es 
gibt diverse Profiler fuer Java, die Dir das verraten. Wenn es Dir aber 
nur um Geschwindigkeit und Optimierung fuer eine spezielle Architektur 
geht bist Du mit Java sowieso falsch beraten.

von mr.chip (Gast)


Lesenswert?

> Wenn es Dir aber nur um Geschwindigkeit und Optimierung fuer eine
> spezielle Architektur geht bist Du mit Java sowieso falsch beraten.

Nein, darum geht es nicht. Aber ich möchte halt auch in Java effiziente 
Programme schreiben. Werde mir wohl die Profiling- und JIT-Dokumente mal 
ansehen.

von mr.chip (Gast)


Lesenswert?

Wenn wir gerade dabei sind: Gibt es eigentlich eine schöne Variante, um 
in Java Bitfelder einzugeben? So frei nach 0b0001111 wie man es aus dem 
GCC kennt?

von blahblahblah (Gast)


Lesenswert?

es gibt ziemlich viele möglichkeiten ein j2me prog. zu optimieren.

das erste wäre sicher gleich mal der obfuscator oder wie das ding 
heisst. das ding baut ein paar sehr interessante sachen zusammen und 
optimiert im idealfall schon ein, zwei sachen.

das nächste ist sicher das zeichnen. kompletter redraw oder nur einzelne 
teile. das musst du aber selber wissen... irgendwo solls ja auch einfach 
werden.

möglichst keine objekte erzeugen sondern das ganze teil in die 
hauptklasse werfen.

kleine bilder zu grösseren zusammenfassen

loop unrolling kann auch ein bisschen was rausholen (kannst ja n test 
prog schreiben)

shifting -> ja

das jar auseinander nehmen und mit einem anderen packer 
wiederzusammenfügen. diese funktionieren teilweise etwas besser... 
sprich minim kleinere Datei

am meisten habe ich mich mit grösseren arrays rumgeärgert die dann 
ausgegeben (sprich gezeichnet) werden sollten. viel zu langsam, machs 
einfach nicht. nimm n bitmap oder machs über kleine quadrate oder sowas

ich habe mich nie an den vorschlag gehalten alles in die hauptklasse zu 
werfen, das war mir zu blöd(dann bräuchte ich keine oo sprache zu 
benutzen). aber ich hab immer darauf geachtet, dass ich ein objekt mehr 
als nur einmal verwenden kann. so dass es nicht in den garbage collector 
rein kommt.

Ah, und jedesmal wenn Du ein "fertiges" objekt von J benutzen willst, 
schau dir nochmal den source davon an. wenn ein objekt 150 methoden hat 
und du nur 2 brauchst reiss dir den arsch auf und mache eines mit genau 
nur den zweien.

mit threading kannst du sehr schön ein paar sachen laden und den user 
gezielt ablenken. so wirkt es auch als wäre dein prog. sehr schnell.

und je öfer es geht desto besser: als final deklarieren

letzen endes solltest du dein ding erstmal zum laufen kriegen und dann 
optimieren falls es nötig wird. Vielleicht ists nähmlich gar nicht 
nötig.

eigentlich sollte man den ganzen scheiss auch bei ganz normalen J(se) 
machen. aber die meisten sind zu faul oder aber schnallen es einfach 
ned.
das beste beispiel was ich gesehen habe war n schachbrett, dass aus 
jbuttons bestand!!! kein wunder das viele immer noch sagen j ist 
langsam, genau solche sachen sind der grund.

ich denke mal das sind die antworten die du gesucht hast und nicht der 
90% müll da oben

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

mr.chip wrote:
> Wenn wir gerade dabei sind: Gibt es eigentlich eine schöne Variante, um
> in Java Bitfelder einzugeben? So frei nach 0b0001111 wie man es aus dem
> GCC kennt?
Du kannst eine String in verschiedenen "Basen" parsen lassen:
1
final int bin = Integer.parseInt("011110", 2);
2
final int hex = Integer.parseInt("ABC12", 16);
3
final int b20 = Integer.parseInt("AGHIJ", 20);
4
System.out.println("Bin: "+bin);
5
System.out.println("Hex: "+hex);
6
System.out.println("B20: "+b20);
Wenn mans braucht ;)
Hexadezimal kann man (wie bei C auch) direkt eingeben, bei Binär gehts 
glaub ich nicht mag aber auch vom Compiler abhängen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> bei Binär gehts glaub ich nicht mag aber auch vom Compiler abhängen.

Das tut es bei C ja auch. C kennt keine Binärnotation, das ist nur eine 
proprietäre und nicht empfehlenswerte Erweiterung mancher Compiler (gcc 
und ein paar andere).

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Michael G. wrote:
> Es gibt keine Pointer in Java.

Jede nicht primitive Variable in Java ist ein Pointer.
1
String s="hallo";
2
s = null;
3
l = s.length();      // -> java.lang.NullPointerException

von Rayk (Gast)


Lesenswert?

>Es gibt keine Pointer in Java.
>Jede nicht primitive Variable in Java ist ein Pointer.
Beides Stimmt ;o)
Es gibt Zeiger, aber keine Zeigerarithmetik

von zwieblum (Gast)


Lesenswert?

@Rufus t. Firefly:

"... proprietäre ..." ist es nicht, siehe dazu die definition von 
"proprietär": 1: one that possesses, owns, or holds exclusive right to 
something ; specifically : proprietor 12: something that is used, 
produced, or marketed under exclusive legal right of the inventor or 
maker ; specifically : a drug (as a patent medicine) that is protected 
by secrecy, patent, or copyright against free competition as to name, 
product, composition, or process of manufacture3: a business secretly 
owned by and run as a cover for an intelligence organization

wenn's gcc macht, kann man sich ziemlich sicher darauf verlassen, dass 
das "feature" nicht ausstirbt.

von Fragender (Gast)


Lesenswert?

Michael G. (linuxgeek) wrote:
> Es gibt keine Pointer in Java.

Andreas Schwarz (andreas) (Admin) wrote:
> Jede nicht primitive Variable in Java ist ein Pointer.

herrlich, wenn sich Antworten derart widersprechen :)

Deshalb mal ne Frage an die Profis hier. Ich habe java Programme immer 
noch als vergleichsweise träge in der Ausführung im Sinn. Jetzt lese ich 
immer wieder das dem schon lange nicht mehr so ist. Warum findet man 
(auch wieder im Vergleich) so selten Anwendersoftware für Windows die in 
java geschrieben ist und die gleichzeitig unter Linux läuft? Woran liegt 
das, dass nicht auch eagle in java geschrieben ist? Oder meint wegen 
OpenOffice, oder die vielen nützlichen Tools die das Windows Leben so 
erleichtern, die alle nicht in java geschrieben sind. Namhafte Programme 
wie beispielsweise Audacity oder VirtualDub, wie XnView oder IrfanView, 
VLC Media Player, TrueCrypt usw. usw. sind teils als cross platform SW 
mit Hilfe von QT geschrieben, aber alle nicht in java. Wozu wird 
eigentlich überhaupt QT und WxWidgets verwendet, wenn java das alles 
wuppt? Wie viel Software rund um Mikrocontroller ist in java 
geschrieben? Doch kaum was oder? Woran liegt das, wenn java inzwischen 
eine so toll und schnelle Programmiersprache ist?

Grüße

von Markus (Gast)


Lesenswert?

Nur weil Du keine Java-Applikationen kennst, heißt das noch lange nicht, 
daß es keine gibt.

Es gibt da die ein oder andere völlig bedeutungsloas Software, die Java 
einsetzt, stark darauf basiert oder sogar komplett darin geschrieben 
ist. Z.B. Oracle, das findest Du natürlich nicht unbedingt auf 'nem 
Microcontroller. Das bringt standardmäßig eine eigene JVM mit, damit der 
Anwender ein paar kleine Spielereien umsetzen kann. Dann LotusNotes, 
eine völlig unbedeutende GroupWare. Diese Software wird von den Kunden 
auf die eigenen Bedürfnisse angepasst. Mit Java. WebSphere, von der 
selben Software-Klitsche (IBM), komplett in Java geschrieben. Ach ja, da 
gibt es noch die 10 Mann-Firma aus Walldorf mit ihrer völlig 
bedeutungslosen Unternehmenssoftware SAP R3. Auch Java. Dann, um mich 
mal wider etwas in Richtung richtiger Software zu begeben: die 
Entwicklungsumgebungen Eclipse und NetBeans. 100% Java. Aus dem 
Web-Umfeld fällt mir noch der völlig bedeutungslose ApplicationServer 
JBoss ein. Schon wieder Java.

Aber du hast Recht. Auf einem Microcontroller läuft es nicht wirklich...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Fragender wrote:
> wie beispielsweise Audacity oder VirtualDub, [...] VLC Media Player,
> TrueCrypt usw. usw. sind teils als cross platform SW
Also wenn man mal etwas nachdenkt sind das alles Anwendungsfälle wo man 
massiv Auf sehr systemspezifische Funktione zugreift (VirtualDub+VLC 
nutzen z.B. die Windows Audio/VideoCodecs), TrueCrypt emuliert ein 
Dateisystem... btw.. VLC gibt es (dank JNI) auch für Java, dann aber 
natürlich nicht Plattformunabhängig.

> Wozu wird
> eigentlich überhaupt QT und WxWidgets verwendet, wenn java das alles
Weil immer mehr Leute merken das es doch noch andere Betriebssysteme 
gibt ;)

> wuppt? Wie viel Software rund um Mikrocontroller ist in java
> geschrieben? Doch kaum was oder? Woran liegt das, wenn java inzwischen
> eine so toll und schnelle Programmiersprache ist?
Sicher könnte man nen Mikrocontroller auch mit Java Programmieren da 
gibt es sogar spezielle Controller für. Und die meisten Handys sind 
inzwischen auch Java fähig wenn nicht sogar Java basiert.

Es gibt sogar ne JavaVM für den Mega8, und man könnte theoretisch auch 
in Java einen MicroController programmieren, der Compiler müßte diesen 
Code (wie bei C, C++, Basic,...) nur geeigent in Mashinenbefehle 
umsetzen, aber dafür war/ist Java einfach auch nicht gedacht, wengleich 
es auch möglich wäre.

von P. S. (Gast)


Lesenswert?

Markus wrote:
> Nur weil Du keine Java-Applikationen kennst, heißt das noch lange nicht,
> daß es keine gibt.

Dass er sich vor allem fuer Anwendersoftware fuer Windows interessiert, 
haette dir ja auffallen koennen. Trotzdem nennst du fast nur Software 
aus dem Business- und Serverbereich. Falls dir der Unterschied nicht 
bewusst ist: Bei letzterer werden a) die Endanwender selten gefragt und 
b) besteht eine voellig andere Kosten/Nutzen-Verteilung - ist die 
Serverapplikation zu langsam, wird eben noch eine Kiste dazu gestellt.

> Es gibt da die ein oder andere völlig bedeutungsloas Software, die Java
> einsetzt, stark darauf basiert oder sogar komplett darin geschrieben
> ist. Z.B. Oracle, das findest Du natürlich nicht unbedingt auf 'nem
> Microcontroller. Das bringt standardmäßig eine eigene JVM mit, damit der
> Anwender ein paar kleine Spielereien umsetzen kann.

"Kleine Spielereien" drueckt es sehr gut aus. Also kaum ein gutes 
Beispiel. Der relevante Teil ist definitiv kein Java.

> Dann LotusNotes,
> eine völlig unbedeutende GroupWare. Diese Software wird von den Kunden
> auf die eigenen Bedürfnisse angepasst. Mit Java.

LotusNotes war schon immer langsam und nervig und das wurde mit Java 
nicht besser. Allerdings auch nicht schlechter. Ob's intern wirklich 
100% Java ist, weiss ich nicht... Und fuer den Anwender zuhause voellig 
unbedeutend.

> WebSphere, von der
> selben Software-Klitsche (IBM), komplett in Java geschrieben.

Und mindestens genauso gut. Keine Anwendersoftware, nicht schnell, ist 
aber auch im Einsatzgebiet nicht Prioritaet.

> Ach ja, da
> gibt es noch die 10 Mann-Firma aus Walldorf mit ihrer völlig
> bedeutungslosen Unternehmenssoftware SAP R3. Auch Java.

Das ist schlicht und einfach falsch. Mich beschleicht der Verdacht, dass 
du einige der genannten Systeme nur am Rande kennst. Abgesehen davon ist 
SAP in keiner Variante ein gutes Beispiel fuer Performance.

> Dann, um mich
> mal wider etwas in Richtung richtiger Software zu begeben: die
> Entwicklungsumgebungen Eclipse und NetBeans. 100% Java.

Einzig Eclipse hat in diesem Vergleich ueberhaupt Relevanz, da das 
halbwegs zum Thema Anwendersoftware passt. Und tatsaechlich, es ist ganz 
gut benutzbar - solange die Projekte nicht zu gross werden. Aber einer 
gewissen Groesse faengt es gnadenlos an zu nerven.

> Aus dem
> Web-Umfeld fällt mir noch der völlig bedeutungslose ApplicationServer
> JBoss ein. Schon wieder Java.

Und schon wieder keine Anwendersoftware.

> Aber du hast Recht. Auf einem Microcontroller läuft es nicht wirklich...

Sollte einen schon nachdenklich stimmen, dass Java sich weder in der 
Form der Applets, noch als Applikationen, sondern ausgerechnet bei 
Servern etablieren konnte. Wo es auf die oft genannten Staerken wie 
Portabilitaet und GUI so gar nicht ankommt.

von Peter (Gast)


Lesenswert?

Als Beispiel für Java ausgerechnet Oracle zu nennen war nicht sehr 
schlau. Der Installaller ist ein sehr gutes Beispiel wie langsam eine 
Java-Gui ist.
Das ganze noch über RDP und man sieht schön wie den oberfläche in 
Zeitlupe gemalt wird.

Bei Eclipse muss man wirklich sagen das man den unterschied kaum merkt.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Peter Stegemann wrote:
>> Aber du hast Recht. Auf einem Microcontroller läuft es nicht wirklich...
> Sollte einen schon nachdenklich stimmen, dass Java sich weder in der
> Form der Applets, noch als Applikationen, sondern ausgerechnet bei
> Servern etablieren konnte. Wo es auf die oft genannten Staerken wie
> Portabilitaet und GUI so gar nicht ankommt.
Wie gesagt es GIBT Java fähige Controller (der AVR32 z.B. kann auch 
nativen Java code ausführen) und gerade im Handy bereich ist Java sehr 
wohl ein Thema bzgl. Applikation und GUI!

von zwieblum (Gast)


Lesenswert?

ja schon, aber Java ME. und das ist nicht das, was man sich so 
landläufig unter java vorstellt.

von Klaus (Gast)


Lesenswert?

Das einzig tolle Feature an Java is doch "Compile once, run everywhere." 
Und das erkauft man sich halt durch die VM Overhead.

Das was man allgemein als Plattform unabhängig bezeichnet, "Write once, 
compile everywhere.", kann C++ genauso.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Kurz noch zum Thema "systemnah" mit Java. Ich belege gerade einen Kurs, 
in dem es um Chipkartenprogrammierung mit Java geht (Javacards). Auf 
diesen Karten wird tatsaechlich eine kleine JVM ausgefuehrt, die einen 
(konvertierten) Java-Bytecode ausfuehrt. Trotz alledem sind die 
Architekturdetails durch die JVM verborgen. Und es geht dort auch nicht 
um harte Echtzeit, sondern eingebettete Programmierung. Dedizierter 
Kryptoprozessor ist auch vorhanden.

Was ich damit sagen will: Java laeuft durchaus auf Mikrocontrollern, der 
Sprachumfang ist aber empfindlich eingeschraenkt und natuerlich ist die 
Standard-Lib nicht verfuegbar (es gibt z.B. kein java.lang.String). 
Threads und solche Spielereien sind auch nicht moeglich. Und es gibt nur 
eindimensionale Arrays.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Rayk wrote:
>>Es gibt keine Pointer in Java.
>>Jede nicht primitive Variable in Java ist ein Pointer.
> Beides Stimmt ;o)
> Es gibt Zeiger, aber keine Zeigerarithmetik

Richtig... und somit sprechen wir hier bestenfalls von einer Referenz ;)

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Fragender wrote:

> Deshalb mal ne Frage an die Profis hier. Ich habe java Programme immer
> noch als vergleichsweise träge in der Ausführung im Sinn. Jetzt lese ich
> immer wieder das dem schon lange nicht mehr so ist. Warum findet man
> (auch wieder im Vergleich) so selten Anwendersoftware für Windows die in
> java geschrieben ist und die gleichzeitig unter Linux läuft? Woran liegt
> das, dass nicht auch eagle in java geschrieben ist?

Weil zu der Zeit, als Eagle entwickelt wurde, Java wahrscheinlich noch 
ein "gleam in the programmer's eye" war.

> eigentlich überhaupt QT und WxWidgets verwendet, wenn java das alles
> wuppt? Wie viel Software rund um Mikrocontroller ist in java
> geschrieben? Doch kaum was oder? Woran liegt das, wenn java inzwischen
> eine so toll und schnelle Programmiersprache ist?

Java laesst sich relativ leicht decompilieren. Es gibt Obfuscater, die 
erzeugen aber so einige Probleme. Ausserdem ist das klassische Swing 
teilweise doch etwas haesslich, wenn auch flexibel. Sun sollte mal am 
L&F arbeiten, dann wird Java sicherlich noch weiter vordringen.

Gruss,
Michael

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Peter Stegemann wrote:

>> Es gibt da die ein oder andere völlig bedeutungsloas Software, die Java
>> einsetzt, stark darauf basiert oder sogar komplett darin geschrieben
>> ist. Z.B. Oracle, das findest Du natürlich nicht unbedingt auf 'nem
>> Microcontroller.

Oracle in Java geschrieben... ja, is schon klar, ne? ;)
Es wuerde allerdings so einiges erklaeren, wenn es so waere :D


>> Dann, um mich
>> mal wider etwas in Richtung richtiger Software zu begeben: die
>> Entwicklungsumgebungen Eclipse und NetBeans. 100% Java.

Eclipse ist nicht in Java geschrieben. Das sieht man auf den ersten 
Blick.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Michael, manchmal würde es nicht schaden wenn du dich vor dem Aufstellen 
irgendwelcher Behauptungen erst informieren würdest.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Na dann weiss man zumindest, wo diese "SWT encountered a fatal 
error..."-Dialoge herkommen :D

von P. S. (Gast)


Lesenswert?

Es wuerde auch nicht schaden, wenn er ordentlich quoten wuerde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.