2010-12-05 5 views
7

Java ist eine wunderschön gestaltete OO-Sprache, aber das erste, was mir aufgefallen ist, ist, wie langsam es ist (im Vergleich zu C++). Dies liegt wahrscheinlich daran, dass es eine andere Übersetzungsebene (die VM) durchlaufen muss, anstatt direkt im nativen Mikrocode der CPU ausgeführt zu werden.Gibt es eine CPU, die Java in Mikrocode ausführt?

Meine Frage: Kennen Sie irgendwelche Versuche, Java-spezifische CPUs zu erstellen, die Java nativ ausführen, ohne die software-implementierte VM zu benötigen?

+5

Menschen (zu Recht) beschweren sich über "Java ist langsam" Beschwerde in N ... (N-1) ...(Eine spezielle CPU, die Java-Bytecode ausführt, würde sehr wahrscheinlich sehr viel langsamer sein als eine moderne Desktop-CPU, auf der eine normale JVM ausgeführt wird). – delnan

+0

Nun, Assembly ist noch schneller, aber die Zeit, die Sie an Leistung gewinnen, wird Entwicklungszeit (und multipliziert mit 100 Faktor vielleicht ...) – digEmAll

+0

@skaffman Mit langsam meinte ich langsamer als ein vergleichbares Programm in C++. Versuchen Sie, Eclipse (welches AFAIK in Java geschrieben wurde) in einer VMWare-VM auszuführen und sehen Sie, was ich meine. –

Antwort

17

Sun entwarf den Prozessor picoJava vor etwa 10 Jahren, aber es ging nie irgendwohin - es gab zu der Zeit keinen Markt dafür und moderne VMs machen das Konzept ziemlich sinnlos.

Dann gibt es die flügge ARM Jazelle Architektur.

+1

+1 für diese genaue Information. Ich werde es in Kürze lesen und versuchen zu verstehen, warum es nie irgendwohin ging. –

+1

@Android: Es ging nie irgendwo hin, weil es keinen Markt dafür gab, und weil die JVMs des Tages * langsam waren. Es wird heute nirgendwohin gehen, weil die modernen JVMs * nicht * langsam sind. – skaffman

+1

@saffman der Wikipedia-Artikel, den Sie gerade gebracht haben, sagt "Beschleunigung Bytecode-Ausführung bis zu 20 Mal, im Vergleich zu Standard-Intel-CPU mit einer JVM." - Das meine ich mit "langsam". Wir nehmen heute eine schnellere CPU als selbstverständlich hin, aber das ist nicht sehr energieeffizient ... Mit langsam meine ich langsam ** er **. –

5

Der einzige Hinweis, den ich bisher für dieses Problem zu finden ist der folgende Artikel:

http://www.theserverside.com/discussions/thread.tss?thread_id=59958

Während ich zu wissen, zunächst interessiert in erstem war, ob Java-CPUs ist und was sie sind, dieses Thema Schuppen etwas Licht auf warum Ich habe noch nichts gehört (bis ich die gelehrten Antworten hier gelesen habe). Der letzte Kommentar von Alex Besogonov, scheint die beste Erklärung zu sein:

Java-Bytecode nicht geeignet ist, um auf echte Hardware ausgeführt werden. Es ist Stack-basiert, so dass Pipelining aus dem Fenster geht. In Theorie kann man on-the-fly Übersetzung von Stack-basierten zu Register-based Maschine, aber es wird benötigen eine Menge von Transistoren.

Also in Wirklichkeit ist es IMMER mehr wirksam JIT-kompilieren Java Bytecode und dann auf einer gemeinsamen CPU ausführen. Dort ist eine Ausnahme JVMs für Low-Power Geräte, bei denen die Geschwindigkeit der Hardware JVM kein Problem ist (erinnern Sie sich Forth CPUs).

Natürlich kann Hardware noch einige Funktionen bieten, um JVMs zu beschleunigen. Wie Hardware-unterstützte Weiterleitung Zeiger , die es ermöglichen, schnelle Echtzeit kompaktierenden pausenlosen GC (ich nehme an, Azul Hardware hat diese Unterstützung).

Das ist sehr interessant. Vielen Dank für Ihre Antworten.

5

Azul Systems entwickelt Systeme von Grund auf mit (massive Dienste laufen auf) Java im Hinterkopf, einschließlich Hardware-assisted Garbage Collection.

Es gibt auch GCJ zum Kompilieren von Java zu nativem Code, obwohl es keine vollständige Implementierung von Java ist.

+7

Aber der * ganze Punkt * der Vega-3-CPU von Azul ist, dass sie * JVML-Bytecode * nicht implementiert. Es ist einfach eine gut entworfene, orthogonale CPU. Die Smarts befinden sich im JVML-zu-Native-Compiler (der eigentlich nur eine lizenzierte Variante des C2 Compilers von Sun/Oracle ist, der Teil der HotSpot JVM ist) und nicht in der CPU. Die Leute, die Azul * gründeten, kamen aus Suns Java-CPU-Projekten, und sie taten es genau, weil sie feststellten, dass die Implementierung von JVML in der CPU * nicht * schneller, es * langsamer * ist, weil es die massive dynamische Optimierung wegwirft Potenzial. –

+2

+1 für diese Information. Ich hoffe, dass dieser Thread eine Referenz für bestehende Versuche werden wird. –

+2

@ Jörg - Ja, das ist keine sehr gute Antwort auf die gestellte Frage. aber da es sich nach einer ziemlich explorativen Frage anhört (hat jemand X gemacht? statt warum nicht?), scheint es angemessen zu sein. –

0

Sie könnten JOP

Es ist Open-Source versuchen wollen, und Sie können es auf Ihrer eigenen Hardware versuchen.

Verwandte Themen