Hlavní navigace

Seriál Programovaci jazyk Java a JVM

Seriál se věnuje popisu nových či zajímavých vlastností programovacího jazyka Java i popisu interní funkce JVM.

Pohled pod kapotu JVM – exkluzivní celoobrazovkové grafické režimy

Dnešní část seriálu o jazyce Java i o stroji Javy je zaměřena na popis základních vlastností exkluzivních celoobrazovkových grafických režimů, které lze v Javě použít pro tvorbu her a dem. Ukážeme si, jak lze zjistit základní informace o dostupných grafických režimech i jak se provádí zapnutí vybraného režimu.

Doba čtení: 19 minut

Pohled pod kapotu JVM – je grafický subsystém Javy vhodný pro 2D hry?

Dnešní část seriálu o jazyce Java pojednává o problematice grafického subsystému Javy, zejména s ohledem na tvorbu 2D her, popř. interaktivních programů či dem. Ukazuje se, že při volbě správných technik lze i v této oblasti dosáhnout uspokojivých výsledků srovnatelných s jinými technologiemi (SDL, Pygame atd.).

Doba čtení: 21 minut

Pohled pod kapotu JVM – přednosti a zápory využití JNI při optimalizacích (3)

V dnešní části seriálu o jazyce Java se podruhé budeme zabývat problematikou polí vytvořených v javovské části aplikace a předávaných do nativní (většinou céčkové) funkce. Na dvojici benchmarků si ukážeme, jaké JNI funkce je vhodné využít a které funkce jsou naopak z časového a paměťového hlediska nevýhodné.

Doba čtení: 46 minut

Pohled pod kapotu JVM – přednosti a zápory využití JNI při optimalizacích (2)

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy budeme pokračovat v popisu rozhraní JNI. Řekneme si, jakým způsobem mohou nativní (céčkové) funkce pracovat s poli vytvořenými v javovské části aplikace a jaké problémy mohou při práci s poli v nativních funkcích nastat.

12. 11. 2013 0:00
Doba čtení: 19 minut

Pohled pod kapotu JVM – přednosti a zápory využití JNI při optimalizacích

V dnešní části seriálu o jazyce Java si řekneme, jaké přednosti ale i zápory může přinést využití rozhraní JNI při optimalizaci javovských aplikací. Díky existenci JNI lze část aplikačního kódu napsat v některém jazyku (C, C++) překládaném do nativního kódu, což však nemusí být ve všech případech výhodné.

Doba čtení: 19 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (použití MMX a SSE2)

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy si řekneme další podrobnosti o optimalizacích funkce System.arraycopy(). Ukážeme si, jakým způsobem jsou při implementaci této funkce detekována a použita různá rozšíření instrukčních sad – především MMX a SSE2.

Doba čtení: 33 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (záhadná funkce System.arraycopy)

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy si řekneme, jakým způsobem je v Hotspotu implementována velmi důležitá a často využívaná funkce System.arraycopy(). Uvidíme, že konkrétní tvar této funkce se bude lišit v závislosti na zarovnání či na překryvu kopírovaných prvků polí.

Doba čtení: 33 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (5)

V dnešní části seriálu o programovacím jazyce Java si popíšeme některé další typy optimalizací prováděných automaticky JIT překladači. Zaměříme se jak na známé optimalizační metody typu rozbalení smyček či eliminaci volání metod, tak i na využití již připravených sekvencí instrukcí (intrinsic funkce).

Doba čtení: 23 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (5)

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy si nejdříve řekneme, jak vyřešili autoři HotSpotu problematiku tvorby safe-pointů. Posléze se seznámíme s principem generování safe-pointů na platformě x86 a dále se budeme zabývat problematikou synchronizovaných metod a bloků.

Doba čtení: 19 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (4)

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy se budeme zabývat problematikou synchronizace a atomicity operací v javovských aplikacích. Mimo jiné si řekneme, jaké problémy může způsobit použití atributů s modifikátorem „volatile“ i způsob využití takzvaných safe-pointů.

Doba čtení: 15 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (3)

V dnešní části seriálu o JVM si nejprve řekneme, jakým způsobem je možné se podívat na disasemblovaný výpis strojového kódu generovaného JIT překladačem. Ukážeme si také, jak vypadá vygenerovaný kód po rozbalení smyček (loop unrolling), což je jedna z optimalizací prováděných JIT překladačem typu server.

Doba čtení: 50 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (2)

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy se již podruhé budeme zabývat způsobem optimalizace aplikací naprogramovaných v Javě. Velký vliv na výkonnost aplikací běžících v JVM mají JIT (Just-In-Time) překladače, takže se dnes seznámíme se základy jejich nastavování a sledování.

Doba čtení: 21 minut

Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy se seznámíme se základními technikami optimalizace aplikací naprogramovaných v Javě. Postupně si ukážeme jak vysokoúrovňové optimalizace, tak i nastavování a ladění samotného virtuálního stroje Javy (což se týká především GC a JITu).

Doba čtení: 16 minut

Pohled pod kapotu JVM – změna systémových tříd s využitím nástroje Javassist

V této části seriálu o programovacím jazyce Java si na dvojici demonstračních příkladů ukážeme, jakým způsobem lze modifikovat bajtkód systémových tříd s využitím nástroje Javassist i to, jak je následně možné tyto třídy použít v nově spuštěné JVM. Taktéž si vysvětlíme činnost přepínače -Xbootclasspath.

3. 9. 2013 0:00
Doba čtení: 20 minut

Pohled pod kapotu JVM – tvorba programových smyček s využitím nástroje Javassist

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy si ukážeme, jak lze s využitím nástroje Javassist tvořit bajtkód metod obsahujících programové smyčky. Uvidíme, že nejproblematičtějším úkolem je v tomto případě výpočet cílů nepodmíněných i podmíněných skoků.

27. 8. 2013 0:00
Doba čtení: 26 minut

Pohled pod kapotu JVM – úprava programových smyček s využitím nástroje Javassist

V dnešní části seriálu o jazyce Java si ukážeme, jak je možné s využitím Javassistu změnit sekvenci instrukcí použitou pro implementaci programových smyček. Tuto znalost využijeme k dalšímu způsobu „oháčkování“ třídy Login tak, aby se bylo možné přihlásit pomocí dvouznakového jména a hesla.

Doba čtení: 26 minut

Pohled pod kapotu JVM – další modifikace bajtkódu Javy s využitím nástroje Javassist

V dnešní části seriálu o jazyce Java i o virtuálním stroji Javy budeme pokračovat v popisu cílené modifikace bajtkódu javovských tříd s využitím nástroje Javassist. Ukážeme si, jak vylepšit demonstrační příklad popsaný minule tak, aby pracoval korektně i za předpokladu, že se změní kód třídy Login.

13. 8. 2013 0:00
Doba čtení: 20 minut

Pohled pod kapotu JVM – jednoduchý hacking bajtkódu Javy s využitím nástroje Javassist

V dnešní části seriálu o jazyce Java i o virtuálním stroji si řekneme, jak se s využitím nástroje Javassist může cíleně modifikovat bajtkód javovských tříd tak, aby se změnilo chování některých metod. Konkrétně si ukážeme „útok“ na metodu sloužící pro přihlašování, resp. pro ověření uživatele.

Doba čtení: 24 minut

Pohled pod kapotu JVM – změna přístupových práv k metodám a atributům libovolné třídy

V dnešní části seriálu o jazyce Java si ukážeme jeden ze způsobů využití nástroje Javassist. Řekneme si totiž, jak je možné změnit přístupová práva k metodám a atributům libovolné třídy. Jedná se sice o poměrně jednoduchou problematiku, která ale ukazuje sílu a současně i snadnost použití Javassistu.

Doba čtení: 21 minut

Pohled pod kapotu JVM – přímé generování instrukcí bajtkódu s využitím nástroje Javassist (2)

V dnešní části seriálu o jazyce Java si řekneme, jak se s využitím nástroje Javassist dají tvořit i složitější metody (resp. jejich bajtkód). Dále si ukážeme jednu velmi užitečnou funkcionalitu Javassistu – jeho schopnost načíst právě vytvořenou či modifikovanou třídu do JVM a ihned ji začít používat.

23. 7. 2013 0:00
Doba čtení: 30 minut

Pohled pod kapotu JVM – přímé generování instrukcí bajtkódu s využitím nástroje Javassist

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy se již potřetí budeme věnovat popisu možností nástroje Javassist. Dnes si ukážeme, jak lze přímo generovat jednotlivé „strojové“ instrukce bajtkódu s využitím příslušných pomocných tříd Javassistu.

Doba čtení: 25 minut

Pohled pod kapotu JVM – vytváření i dekompilace metod s využitím nástroje Javassist

V dnešním článku o jazyce Java i o virtuálním stroji Javy budeme pokračovat v popisu nástroje Javassist, s nímž jsme se seznámili v předchozích dvou dílech. Dnes si ukážeme způsob vytváření nových metod a přidání těchto metod do libovolné třídy. Nezapomeneme ani na nízkoúrovňovou operaci – dekompilaci metod.

Doba čtení: 23 minut

Pohled pod kapotu JVM – využití nástroje Javassist pro generování bajtkódu

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy si ukážeme některé základní možnosti nástroje Javassist. Tento nástroj lze použít pro programové generování bajtkódu, popř. pro cílenou modifikaci bajtkódů již existujících tříd. Dnes si ukážeme zejména způsob vytváření třídních atributů.

2. 7. 2013 0:00
Doba čtení: 16 minut

Pohled pod kapotu JVM – nástroje pro vytváření a manipulaci s bajtkódem

Od dnešní části seriálu o jazyce Java se začneme věnovat další problematice související s JVM. Postupně si totiž popíšeme způsob využití nástrojů určených pro vytváření a/nebo manipulaci s bajtkódem zpracovávaným virtuálním strojem Javy. Dnešní demonstrační příklad bude postaven na nástroji Javassist.

Doba čtení: 12 minut

Pohled pod kapotu JVM – dokončení popisu rozhraní JDI: krokování

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy se již naposledy budeme zabývat popisem rozhraní JDI (Java Debugger Interface). Ukážeme si využití tohoto rozhraní při krokování, popř. trasování aplikace spuštěné ve sledovaném virtuálním stroji Javy.

18. 6. 2013 0:00
Doba čtení: 30 minut

Pohled pod kapotu JVM – práce s breakpointy s využitím rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy si vysvětlíme způsob práce s breakpointy s využitím rozhraní JDI (Java Debugger Interface). Řekneme si, jak se breakpointy nastavují i jaké informace lze získat ve chvíli, kdy nějaké vlákno na breakpoint vstoupí.

Doba čtení: 29 minut

Pohled pod kapotu JVM – detekce čtení i zápisu do vybraného atributu s využitím rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy dokončíme téma, kterému jsme se začali zabývat již minule. Ukážeme si způsob využití rozhraní JDI (Java Debugger Interface) pro detekci čtení a současně i zápisu nové hodnoty do sledovaného atributu vybrané třídy.

Doba čtení: 29 minut

Pohled pod kapotu JVM – detekce čtení hodnoty vybraného atributu s využitím rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy si na dvojici demonstračních příkladů ukážeme další možnosti nabízené rozhraním JDI – bude se jednat o jednoduché monitorovací nástroje, které dokážou zaregistrovat přístup (čtení) ke zvolenému atributu vybrané třídy.

28. 5. 2013 0:00
Doba čtení: 26 minut

Pohled pod kapotu JVM – detekce vstupu do metod s využitím rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java si ukážeme způsob detekce vstupu do metod s využitím rozhraní JDI (Java Debugger Interface). Pro zjištění, jaké metody jsou ve sledovaném virtuálním stroji Javy volány, se při využití JDI používá systém událostí, s nímž jsme se seznámili minule.

21. 5. 2013 0:00
Doba čtení: 33 minut

Pohled pod kapotu JVM – využití systémů událostí při sledování činnosti JVM s využitím rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java si popíšeme využití systému událostí implementovaného v rozhraní JDI (Java Debugger Interface). Události – events – jsou totiž v JDI využívány při zkoumání mnoha činností prováděných v monitorovaném JVM, například při práci s breakpointy či při krokování programu.

Doba čtení: 19 minut