Jak JVM volá virtuální metody, jaká temná božstva musí vzývat, aby to bylo aspoň trochu rychlé

Aleksey Shipilёv v (ne)dávné době napsal velice obsáhlý článek o volání virtuálních metod v JVM: The Black Magic of (Java) Method Dispatch. Do detailů v něm popsal všechny způsoby, jak lze volat virtuální metody, vysvětlil všechny optimalizace, které JIT javovského virtuálního stroje dělá a otestoval jaký mají dopad na výkon.Jde o velice hutné…

Generování kódu za běhu (ve Scale)

Někdy je zkrátka potřeba dynamicky generovat kód.Důvodů pro to může být mnoha: Například můžu mít nějakou formu externího doménového jazyka (DSL), který musí běžet rychle, nebo musí být staticky integrován do zbytku programu bez použití reflexe, nebo chci provést nějakou instrumentaci nebo statickou analýzu existujícího kódu. V některých případech…

Haldy nejsou tak velké, jak se se zdají být

Nedávno jsem narazil na zajímavý test, který se snažil nahrubo určit kolik paměti potřebují různé kolekce na JVM. Test probíhal tak, že nastartoval JVM s 1GB heap, vytvořil danou kolekci, začal přidávat jeden element za druhým až do okamžiku, kdy došla paměť. Potom autoři prohlásili, že daná kolekce s výsledným počtem elementů zabere plus/mínus…

Scala – novinky ve verzi 2.10

Scala toho oproti Javě nabízí mnohem víc: jde o kompaktnější jazyk se silnějším typovým systémem, ideální k psaní DSL a programování na správné úrovni abstrakce (FP, OOP, imperativně, deklarativně). Ale kromě toho se Scala vyvíjí drasticky rychlejším tempem. Nová major verze Scaly vychází pravidelně rok od té předchozí a přináší novinky o kterých…

Anorm

Anorm není ORM. Nesnaží se vytvořit jednotné DSL pro komunikaci se všemi myslitelnými datovými zdroji, ale soustředí se jenom na relační databáze, které hovoří jazykem JDBC driveru. Jde o tenkou abstrakci nad JDBC spojením, která nám dává jenom pohodlnější a scalovštější API pro pokládání dotazů a excelentní možnosti parsování výsledků a…

Velikost objektů na JVM – Scala @specialized

Jednou ze zajímavých vlastností jazyka Scala je anotace @specialized. Ta zařídí, že kompilátor vygeneruje několik variant dané tříd, každá specializovaná pro některý primitivní typ a vždy se snaží použít tu nejspecifičtější instanci, aby kód nemusel ztrácet čas autoboxingem a naháněním objektů na haldě. V článku píšu, jak přesně specializace…