Hlavní navigace

Články v rubrice Programovací jazyky

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.

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.

Pohled pod kapotu JVM – získání informací o třídách ve sledované JVM s využitím rozhraní JDI

V dnešní části seriálu o jazyku Java si ukážeme způsob využití rozhraní JDI (Java Debugger Interface) pro získání všech informací o třídách načtených do sledovaného (monitorovaného) virtuálního stroje Javy. Přes JDI lze získat například všechny metody i atributy vybrané třídy, informace o parametrech metod atd.

Pohled pod kapotu JVM – čtení informací o parametrech i o lokálních proměnných metod 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 popíšeme způsob přečtení informací o parametrech i o lokálních proměnných metod s využitím rozhraní JDI (Java Debugger Interface). Využijeme přitom velkou část funkcionality demonstračního příkladu popsaného minule.

Pohled pod kapotu JVM – přístup k zásobníkovým rámcům vláken sledované JVM přes rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy si ukážeme, jakým způsobem je možné s využitím rozhraní JDI (Java Debugger Interface) získat a následně i vypsat obsah zásobníkových rámců všech vláken aplikace běžící v cílové (sledované) JVM.

Pohled pod kapotu JVM – připojení debuggeru k běžícímu virtuálnímu stroji přes rozhraní JDI (2)

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy si řekneme, jakým způsobem lze využít metody nabízené rozhraním com.sun.jdi.VirtualMachine pro získání základních informací o cílovém virtuálním stroji Javy, zejména o vláknech a třídách spravovaných tímto JVM.

Pohled pod kapotu JVM – připojení debuggeru k běžícímu virtuálnímu stroji přes rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy se již potřetí budeme zabývat rozhraním JDI (Java Debugger Interface). Řekneme si, jakým způsobem je možné toto rozhraní využít pro připojení debuggeru či jiného podobného nástroje k již běžícímu javovskému virtuálnímu stroji.

Pohled pod kapotu JVM – spuštění a monitorování virtuálního stroje Javy s využitím rozhraní JDI

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy se již podruhé budeme zabývat rozhraním JDI (Java Debugger Interface). Ukážeme si, jak lze přes JDI spustit a následně i sledovat JVM a především aplikace spuštěné v tomto virtuálním stroji – stejným způsobem pracují i debuggery.

Pohled pod kapotu JVM - architektura JPDA a rozhraní JDI

V dnešní části seriálu o jazyku Java i o virtuálním stroji Javy si řekneme základní informace o architektuře JPDA (Java Platform Debugger Architecture). Ukážeme si, jaký je vztah již popsaného rozhraní JVM TI k JPDA a taktéž si popíšeme základní vlastnosti javovského rozhraní JDI (Java Debugger Interface).

Pohled pod kapotu JVM - využití rozhraní JNI společně s rozhraním JVM TI

Dnes si společně ukážeme způsob využití rozhraní JNI (Java Native Interface) z JVM TI agentů. JVM TI agenti, což jsou programy napsané většinou v C či C++, totiž v některých případech potřebují s využitím JNI vytvářet javovské objekty, popř. volat metody již vytvořených javovských objektů.

Pohled pod kapotu JVM - práce s parametry a lokálními proměnnými metod přes rozhraní JVM TI

Dnes si společně řekneme, jakým způsobem lze přes rozhraní JVM TI získat informace o parametrech a lokálních proměnných statických i nestatických metod. Tyto informace je možné využít například ve chvíli, kdy je v nějaké metodě vstoupeno na breakpoint a je nutné prozkoumat aktuální stav procesu.

Pohled pod kapotu JVM - předčasný výskok z metody s využitím rozhraní JVM TI

V šedesáté osmé části seriálu o jazyce Java i o vlastnostech JVM si řekneme, jakým způsobem je možné přes rozhraní JVM TI vynutit předčasné ukončení libovolné metody. Většinou se jedná o metody, na kterých je nastavený breakpoint, ovšem ve skutečnosti je možné si vynutit ukončení zcela libovolné metody.

Pohled pod kapotu JVM - nastavení breakpointů s využitím rozhraní JVM TI (dokončení)

V dnešní části seriálu o programovacím jazyce Java i o vlastnostech JVM dokončíme popis způsobu nastavení breakpointů přes rozhraní JVM TI. Ukážeme si kompletní demonstrační program, na němž bude shrnuta většina postupů, s nimiž jsme se seznámili v předchozích čtrnácti částech tohoto seriálu.

Pohled pod kapotu JVM - nastavení breakpointů s využitím rozhraní JVM TI (pokračování)

Dnes budeme společnými silami pokračovat v popisu způsobu nastavování breakpointů s využitím rozhraní JVM TI. Na příkladu demonstračního JVM TI agenta si ukážeme, jak lze zaregistrovat breakpoint pro zvolenou metodu a číslo řádku i to, jakým způsobem je agent informován a vstupu na breakpoint.

Pohled pod kapotu JVM - nastavení breakpointů s využitím rozhraní JVM TI

Dnes se začneme zabývat další velmi důležitou funkcí nabízenou rozhraním JVM TI. Jedná se o funkci určenou pro nastavení breakpointů (bodů přerušení). Breakpoint je možné nastavit v libovolné metodě na zvolenou instrukci, takže v JVM TI je práce s breakpointy přesnější než ve většině debuggerů či IDE.

Pohled pod kapotu JVM - sledování čtení i zápisu do vybraného atributu třídy či atributu objektu (dokončení)

V dnešní části seriálu o jazyce Java a JVM dokončíme téma, jemuž jsme se začali věnovat minule. Na příkladu demonstračního JVM TI agenta si ukážeme, jakým způsobem lze zjistit všechny důležité informace o místech, v nichž dochází ke čtení či naopak k zápisu do vybraného atributu třídy či atributu objektu.

Pohled pod kapotu JVM - sledování čtení i zápisu do vybraného atributu třídy či atributu objektu

V dnešním článku o jazyce Java a vlastnostech JVM si ukážeme, jak může být použit JVM TI agent pro sledování čtení či zápisu do atributu třídy či objektu. Rozhraní JVM TI nám totiž dává k dispozici callback funkce zavolané ve chvíli, kdy libovolné vlákno k označeným (vybraným) atributům přistupuje.

Pohled pod kapotu JVM - řetězce na haldě (dokončení) a využití JVM TI pro ladění

V dnešním článku o jazyce Java i o vlastnostech JVM nejprve dokončíme téma, kterým jsme se začali zabývat v předchozím díle – ukážeme si, jak jsou využívány (krátké) řetězce ve vybrané reálné javovské aplikaci. Ve druhé polovině článku si řekneme, jak lze využít rozhraní JVM TI pro ladění (debugging).

Velikost objektů v Javě

O Javě se říká, že je paměťově příliš náročná. Z části je to pravda, ale často jde jen o nešetrné programy, které nerespektují jak Java alokuje paměť. V článku si ukážeme jak spočítat velikost objektů a polí. To obvykle stačí k tomu, abychom psali aplikace, které si místo gigabajtů vystačí se stovkami megabajtů.

Pohled pod kapotu JVM - jak efektivně jsou uložena pole a řetězce na haldě?

Dnes si řekneme, jak získat informace o polích (primitivních typů) uložených na haldě a následně se budeme zabývat uložením řetězců. Jedná se o poměrně důležité téma, jelikož způsob práce JVM s řetězci může mnohdy významným způsobem ovlivnit jak výkonnost javovských aplikací, tak i jejich paměťovou náročnost.

Pohled pod kapotu JVM - průchod hodnotami atributů objektů uložených na haldě (heapu)

Dnes si společně řekneme, jak je možné s využitím JVM TI agenta vypsat hodnoty všech statických a nestatických atributů uložených na haldě. Zaměříme se zejména na průchod atributy základních (primitivních) datových typů, protože ty se zpracovávají odlišně od objektových (referenčních) typů.

Pohled pod kapotu JVM - průchod objekty uloženými na haldě (heapu)

V dnešní části seriálu o jazyce Java i o vlastnostech JVM se seznámíme se způsobem práce s objekty uloženými na haldě s využitím rozhraní JVM TI. Agenti připojení k virtuálnímu stroji Javy přes JVM TI totiž poměrně často potřebují nějaké údaje (instance určitých tříd) z haldy přečíst a následně zpracovat.

Pohled pod kapotu JVM - práce se zásobníkem a haldou přes rozhraní JVM TI

V dnešní části seriálu o programovacím jazyce Java i o virtuálním stroji Javy si řekneme, jak je možné přes rozhraní JVM TI získávat informace ze zásobníkových rámců (stack frames) i z haldy (heap). Jedná se o informace, které jsou mnohdy velmi důležité zejména při ladění či při profilování javovských aplikací.

Pohled pod kapotu JVM - sledování činnosti virtuálního stroje Javy přes rozhraní JVM TI (5.část: detekce vzniku všech výjimek)

Dnes navážeme na část předchozí, v níž jsme si popsali, jak lze v JVM TI agentovi detekovat okamžik zachycení výjimky. Dnes si (naopak) ukážeme způsob zjištění okamžiku vzniku výjimek, a to jak výjimek zachycovaných (i prázdným blokem catch), tak i výjimek, které nejsou zachyceny a povedou k ukončení aplikace.

Pohled pod kapotu JVM - sledování činnosti virtuálního stroje Javy přes rozhraní JVM TI (4.část: práce s výjimkami)

Dnes si řekneme, jak je možné přes rozhraní JVM TI detekovat vznik libovolné výjimky a současně i zjistit další podrobnější informace o tom, na jakém místě programu bude výjimka zachycena a o jakou výjimku se vlastně jedná. Při tvorbě nových demonstračních příkladů si popíšeme i mnohé další možnosti JVM TI.

Pohled pod kapotu JVM - sledování činnosti virtuálního stroje Javy přes rozhraní JVM TI (3.část)

Dnes se již potřetí budeme zabývat popisem rozhraní JVM TI, které je možné využít pro tvorbu takzvaných agentů monitorujících, popř. ovlivňujících chování aplikace v JVM. Příklady uvedené v dnešní části budou velmi jednoduché, protože si ukážeme použití funkcí pro čtení a změnu obsahu systémových proměnných.

Pohled pod kapotu JVM - sledování činnosti virtuálního stroje Javy přes rozhraní JVM TI (2.část)

Dnes budeme pokračovat v popisu rozhraní JVM TI, které je možné využít pro tvorbu agentů monitorujících popř. ovlivňujících chování aplikace v JVM. Dnes se budeme zabývat převážně zjišťováním jmen i signatur volaných metod a sledováním správce paměti. Přitom se dozvíme další podrobnosti o rozhraní JVM TI.

Historie vývoje počítačových her (51. část - další vývojové nástroje dostupné pro mikropočítače Amiga)

Dnes budeme pokračovat v popisu vývojových nástrojů dostupných pro mikropočítače Amiga. Minule jsme se zabývali především různými interpretry a překladači různých variant Basicu a céčka. Dnes si popíšeme Amiga E, ASM-One assembler a v neposlední řadě i skriptovací jazyk ARexx a dva esoterické jazyky.

Pohled pod kapotu JVM - sledování činnosti virtuálního stroje Javy přes rozhraní JVM TI

V dnešní části seriálu o programovacím jazyce Java si popíšeme základní vlastnosti rozhraní JVM TI, pomocí něhož je možné sledovat a taktéž řídit činnost tohoto virtuálního stroje. S využitím JVM TI je například možné přečíst obsah celého heapu, detekovat volání metod, detekovat vzniklé výjimky atd.

Programovací jazyk Clojure 21: ClojureScript aneb překlad Clojure do JavaScriptu

Dnes se zmíníme o projektu ClojureScript. Zatímco původní implementace jazyka Clojure interně používá překlad funkcí do bajtkódu JVM, používá ClojureScript překlad do jazyka JavaScript. Je tedy jasné, kde může ClojureScript nalézt své oblasti použití: především na webu, popř. v oblasti mobilních aplikací.