2009-07-17 5 views
6

Im Laufe der Zeit sind Suns JVM und JIT ziemlich schlau geworden. Dinge, die früher als notwendige Mikrooptimierung bekannt waren, werden nicht mehr benötigt, weil sie für Sie erledigt werden.Smart JVM und JIT Micro-Optimierungen

Zum Beispiel war es früher so, dass Sie alle möglichen Klassen als final markieren sollten, so dass die JVM so viel Code wie möglich einfügt. Nun jedoch weiß das JIT, ob Ihre Klasse endgültig ist, basierend darauf, welche Klassen zur Laufzeit geladen werden. Wenn Sie eine Klasse laden, um die ursprüngliche nicht finalfähig zu machen, werden die Methoden entfernt und die Methode als unmarkiert Finale.

Welche anderen intelligenten Mikrooptimierungen macht die JVM oder JIT für Sie?

BEARBEITEN: Ich habe dies zu einem Community-Wiki gemacht; Ich möchte diese im Laufe der Zeit sammeln.

Antwort

6

Es ist darüber hinaus beeindruckend. All das sind Dinge, die Sie in C++ machen (sicherlich im gleichen Umfang wie Java). Denken Sie daran, dass frühe Versionen von Java die "langsame" Reputation begannen, indem Sie diese Dinge nicht hatten, und wir verbessern signifikant im Laufe der Zeit. Dies ist immer noch ein großes Forschungsgebiet.

+0

gut Java könnte schlau sein, aber es verwendet immer noch viele Ressourcen – Roch

+2

@mnml es ist weniger als das, was die gängige Meinung ist. um ein Objekt zu erstellen, denke ich, dass es so etwas wie 2 oder 3 Anweisungen gibt. Ja, so etwas wie C++ ist im Allgemeinen schneller, aber "Ressourcen" sind nicht nur CPU und Speicher; es ist auch Mannstunden. Hardware ist billig, Leute sind teuer. Auf lange Sicht wird Java oft in der Leistung gewinnen, weil sein JIT erstaunlich ist und die App mehr optimieren wird, als die meisten C++ - Anwendungen jemals träumen könnten. –

+1

@Alex Ich wünschte, ich könnte Ihnen sagen, dass Leute Ressourcen sind. So schrecklich es auch zu glauben ist. Ihre Zeit als Angestellter kostet das Unternehmen oft mehr Geld, als es für ein zusätzliches Terabyte auf der Festplatte oder für eine bessere CPU im alten Webservier zu erwarten ist. –

3

Java ist bei inlining schlauer als es kann

  • Inline-Code nur zur Laufzeit verfügbar oder sogar dynamisch generiert.
  • Inline-virtuelle Methoden (bis zu zwei gleichzeitig)
  • Führen Sie die Escape-Analyse auf Inline-Methoden und die Methoden, die sie inline waren. (Viel schwieriger zu tun in C++)