Ich habe ungefähr 8 Jahre in Java programmiert und kenne die Sprache ziemlich gut als Entwickler, aber mein Ziel ist es, meine Kenntnisse der Interna zu vertiefen. Ich habe Grundstudiengänge in PL-Design besucht, aber es waren sehr breite akademische Übersichten (in Schema, IIRC).
Kann jemand eine Route vorschlagen, um die Details zu untersuchen? Speziell, gibt es bestimmte Themen (zB Garbage Collection), die zugänglicher oder ein guter Ausgangspunkt sein könnten? Gibt es ein anständiges Buch über die Interna der JVM und das Design der Java-Programmiersprache? Mein aktueller Ansatz wird darin bestehen, mit der JVM-Spezifikation zu beginnen und nach Bedarf zu recherchieren.
SUPER
Flag in den Klassendateien eigentlich? Das meiste davon ist in der JVM-Spezifikation selbst beschrieben, aber es erfordert einige Arbeit, um es von dort in Ihr Gehirn zu bekommen ;-)Antworten:
Ich habe ein bisschen davon gemacht, als ich vor Jahren mit Java angefangen habe. Mein Ansatz war es, die VM-Spezifikation zu lesen und die Ausgabe von javap -c zu betrachten, die den disassemblierten Bytecode einer Klasse anzeigt. Ich habe auch versucht, Java-Klassen mit einem bestimmten Bytecode mithilfe eines Java-Bytecode-Assemblers zu erstellen. Es gibt einen Assembler namens Jasmin , wenn Sie das versuchen wollen.
Vielleicht möchten Sie auch das Dokument Lambda Expression Translation lesen , das Brian Goetz von Oracle veröffentlicht hat und das die Strategie zum Übersetzen der in Java 8 hinzugefügten Lambdas (Closures, im Wesentlichen) beschreibt.
Sie können auch den Quellcode für die Hotspot-VM von OpenJDK und die Early-Access-Version des Javac-Compilers mit Lambda-Unterstützung (hg-Repository) für JDK 8 erhalten, wenn Sie wirklich Lust haben, in die Tiefe des Pools zu tauchen.
Ein Blick in die Müllabfuhr ist wahrscheinlich eine gute Idee. Eine schnelle Suche ergab diesen Dr. Dobbs-Artikel über Javas Garbage-First-GC. Ich weiß nicht, ob das eine gute Einführung ist. Ich nehme an, Sie kennen sich bereits mit Mark-and-Sweep-Sammlern und generationsübergreifenden Müllsammlern aus. Wenn nicht, sollten Sie diese zuerst nachlesen.
quelle
Einige zusätzliche Ideen:
quelle
Wenn Sie mit dem Java-Bytecode-Format noch nicht vertraut sind, sollten Sie einen winzigen Compiler schreiben, der gültigen Java-Bytecode (oder Jasmin-Assembler) erstellt und ihn korrekt ausführen lässt.
Es ist sehr befriedigend, "Hello World" oder "4" (gegeben 2 + 2) zu sehen, die von Ihrem Code generiert wurden.
quelle
Informieren Sie sich zusätzlich zu den Aussagen aller anderen auf der Seite Java Performance Tuning . Es enthält viele Artikel zur Speicherbereinigung und Leistungsoptimierung im Allgemeinen. Es enthält auch eine Liste von Büchern zur Leistungsoptimierung , die möglicherweise auch für Sie interessant sind.
quelle