Programuję w Javie od około 8 lat i znam język dość dobrze jako programista, ale moim celem jest pogłębienie wiedzy na temat elementów wewnętrznych. Brałem udział w studiach licencjackich z projektowania PL, ale były to bardzo obszerne przeglądy akademickie (w Schemacie, IIRC).
Czy ktoś może zasugerować trasę, aby zacząć zagłębiać się w szczegóły? W szczególności, czy istnieją konkretne tematy (powiedzmy, wyrzucanie śmieci), które mogą być bardziej dostępne lub być dobrym punktem wyjścia? Czy istnieje przyzwoita książka wysokiego poziomu na temat elementów wewnętrznych JVM i projektu języka programowania Java? Moje obecne podejście będzie zaczynać od specyfikacji JVM i badań w razie potrzeby.
SUPER
flaga w plikach klas? Większość z nich jest opisana w samej specyfikacji JVM, ale wymaga trochę pracy, aby wydostać się z tego do mózgu ;-)Odpowiedzi:
Zrobiłem to trochę, kiedy zacząłem od Java, lata temu. Moje podejście polegało na odczytaniu specyfikacji VM i przyjrzeniu się wynikowi javap -c, który wyświetla zdemontowany kod bajtowy klasy. Próbowałem także utworzyć klasy Java z określonym kodem bajtowym, używając asemblera kodu bajtowego Java. Istnieje asembler o nazwie jasmin , jeśli chcesz tego spróbować.
Możesz także zajrzeć do dokumentu Lambda Expression Translation , który opublikował Brian Goetz z Oracle, który obejmuje strategię, która będzie używana do tłumaczenia lambd (zasadniczo zamknięć), które są dodawane w Javie 8.
Możesz także pobrać kod źródłowy maszyny wirtualnej Hotspot z OpenJDK oraz wersję kompilatora javac z wczesnym dostępem z obsługą lambda (repozytorium hg) dla JDK 8, jeśli naprawdę masz ochotę zanurzyć się w głębokim końcu puli.
Zaglądanie do śmieci jest prawdopodobnie dobrym pomysłem. Szybkie wyszukiwanie ujawniło ten artykuł dr. Dobbsa na temat GC-a po pierwsze śmieci. Nie wiem, czy to dobre wprowadzenie. Zakładam, że wiesz już o zbieraczach śmieci typu mark-and-sweep i generacyjnych; jeśli nie, najpierw będziesz chciał przeczytać o nich.
źródło
Kilka dodatkowych pomysłów:
źródło
Jeśli nie znasz jeszcze formatu kodu bajtowego Java, zastanów się nad napisaniem małego kompilatora, który tworzy prawidłowy kod bajtowy Java (lub asembler Jasmin) i sprawia, że działa poprawnie.
Widok „Hello World” lub „4” (biorąc pod uwagę 2 + 2) wygenerowany przez Twój kod jest bardzo satysfakcjonujący.
źródło
Oprócz tego, co wszyscy inni powiedzieli, sprawdź stronę Java Performance Tuning . Zawiera wiele artykułów na temat usuwania śmieci i ogólnie dostrajania wydajności. Zawiera także listę książek o tuningu wydajności, które mogą być również interesujące.
źródło