Mˇerení Výkonnosti Java Virtual Machine
Total Page:16
File Type:pdf, Size:1020Kb
MASARYKOVA UNIVERZITA FAKULTA}w¡¢£¤¥¦§¨ INFORMATIKY !"#$%&'()+,-./012345<yA| Mˇeˇrenívýkonnosti Java Virtual Machine BAKALÁRSKA PRÁCA Michal K ˇnazský Brno, 2012 Prehlásenie Prehlasujem, že táto bakalárska práca je mojím pôvodným autorským dielom, ktoré som vypracoval samostatne. Všetky zdroje, pramene a li- teratúru, ktoré som pri vypracovaní používal alebo z nich ˇcerpal,v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj. Michal Kˇnazský Vedúci práce: Mgr. Marek Grác ii Pod’akovanie Dakujemˇ pánom Mgr. Marekovi Grácovi a Ing. Pavlovi Tišnovskému, Ph.D. z firmy Red Hat za vedenie práce, za poskytnuté rady a za vel’kú dávku trpezlivosti. iii Kl’úˇcovéslová Java, Java Virtual Machine, meranie výkonu, garbage collector, SPEC, SPECjvm2008, SPECjbb2005, J2DBench, Oracle, IBM, OpenJDK iv Zhrnutie Ciel’om práce je preskúmat’ nástroje na meranie výkonu Java Virtual Ma- chine. Práca sa zaoberá nástrojmi SPECjvm2008, SPECjbb2005 a J2DBench – analyzuje ich vlastnosti a funkcie a hodnotí použitie v praxi. V prak- tickej ˇcastisú nástroje použité na zmeranie a porovnanie výkonu viace- rých JVM. Predstavený je program JVMBenchmarker, ktorý bol vytvo- rený ako súˇcast’ práce. Slúži na automatizované spúšt’anie SPECjvm2008 a SPECjbb2005 nástrojov. Práca sa d’alej venuje garbage collectorom, opi- suje GC prítomné v HotSpot a J9 VM a porovnáva ich výkon pomocou nástroja SPECjbb2005. v Obsah 1 Java ................................... 2 1.1 Java ako platforma ....................... 2 1.2 Java ako jazyk .......................... 2 1.2.1 Java API . 2 1.2.2 Java Virtual Machine . 3 1.2.3 Java Development Kit . 3 1.3 História a vývoj ......................... 3 1.3.1 Oznaˇcovanieverzií . 4 1.4 Java implementácie ....................... 4 1.4.1 Cesta k open source . 5 2 Meranie výkonu Javy ........................ 6 2.1 The Standard Performance Evaluation Corporation . 6 2.2 SPECjvm2008 .......................... 6 2.2.1 Princíp fungovania . 7 2.2.2 Režimy . 7 2.2.3 Pravidlá pre publikovanie výsledkov . 7 2.2.4 Vstup . 8 2.2.5 Priebeh testovania . 9 2.2.6 Výstup . 11 2.2.7 Výpoˇcetvýsledku . 12 2.2.8 Hodnotenie . 12 2.3 SPECjbb2005 ........................... 12 2.3.1 Princíp fungovania . 12 2.3.2 Vstup . 13 2.3.3 Priebeh testovania . 13 2.3.4 Meranie výkonu . 14 2.3.5 Výstup . 14 2.3.6 Pravidlá pre publikovanie výsledkov . 15 2.3.7 Hodnotenie nástroja . 15 2.4 J2DBench ............................. 16 2.4.1 Vstup . 16 2.4.2 Priebeh testov . 16 2.4.3 Výstup . 17 2.4.4 Meranie výkonu . 17 2.4.5 Hodnotenie nástroja . 18 2.5 Dalšieˇ nástroje na meranie výkonu JVM . 18 2.5.1 SPECjEnterprise2010 . 18 3 Meranie výkonu Javy v praxi .................... 19 3.1 Metodiky a postupy testovania . 19 3.2 JVMBenchmarker ........................ 20 vi 3.2.1 Požiadavky . 20 3.2.2 Implementácia . 20 3.2.3 Možnosti konfigurácie . 21 3.2.4 Beh programu . 21 3.2.5 Detekcia a vykonanie príkazu . 22 3.2.6 Detekcia chyby . 23 3.3 Merania výkonu JVM a výsledky . 23 3.3.1 Presnost’ merania . 23 3.3.2 Tabul’ky pre základný beh nástrojov . 25 3.3.3 Porovnanie výkonu rôznych JVM podl’a výrobcu . 25 3.3.4 Výkon JVM podl’a verzie . 26 3.3.5 Výkon JVM v závislosti na architektúre OS . 26 3.3.6 Zhodnotenie základných výsledkov . 27 3.4 Zvyšovanie výkonu JVM .................... 27 3.4.1 Garbage Collector . 27 3.4.2 GC v Oracle Jave/OpenJDK . 28 Sériový GC (Serial Garbage Collector) . 29 Paralelný GC (Parallel Garbage Collector) . 29 Súbežný GC (Concurrent Mark-Sweep GC) . 29 Garbage-First GC . 30 3.4.3 GC v IBM Jave . 30 Súbežný a paralelný mark-sweep GC . 30 Generaˇcnýsúbežný GC (Generational and Concur- rent GC) . 31 Balanced GC . 31 3.4.4 Zhodnotenie výsledkov ladenia JVM . 32 3.5 J2DBench v praxi ........................ 33 4 Záver .................................. 35 5 Prílohy ................................. 39 vii Úvod Java v súˇcasnostipatrí medzi najvýznamnejšie softvérové platformy a nachádza uplatnenie v širokom spektre aplikácií. Táto práca sa venuje skúmaniu Javy z hl’adiska výkonu. Ciel’om práce je opísat’ a použit’ ná- stroje SPECjvm2008, SPECjbb2005 a J2DBench, ktoré merajú výkon Javy v rôznych oblastiach použitia. Práca je rozdelená na tri kapitoly. Prvá sa venuje predstaveniu Java platformy a jej komponentov a približuje súˇcasnýstav platformy. Druhá kapitola sa dá oznaˇcit’ za hlavnú teoretickú ˇcast’ práce – sú tu postupne predstavené jednotlivé nástroje. Pre každý nástroj je analyzo- vaný spôsob testovania a merania výkonu. Tretia kapitola sa venuje použitiu nástrojov v praxi. Je tu predstavený program JVMBenchmarker, ktorý bol vytvorený za úˇcelomzefektívnenia merania výkonu. Dalejˇ sa tu nachádzajú analýzy nameraných hodnôt. Použité boli viaceré implementácie Javy - OpenJDK, Oracle Java, IBM Java. Testy prebiehali na dvoch systémoch s rozdielnym výkonom. Zís- kané výsledky sú zobrazené v tabul’kách a slovne hodnotené. Tretia ka- pitola sa venuje aj ladeniu JVM (Java Virtual Machine – prostredie pre beh Java aplikácií), predstavuje spôsob správy pamäte cez garbage col- lector (nástroj na automatickú správu pamäte v JVM) a porovnáva rôzne nastavenia JVM. 1 1 Java 1.1 Java ako platforma Java je softvérová platforma orientovaná na široké spektrum aplikácií. V súˇcasnostinachádza uplatnenie v rôznych zariadeniach od ˇcipových kariet po aplikaˇcnéservere a superpoˇcítaˇce. Hlavné ˇcastiplatformy sú Java Card, Java ME (Java Micro Edition), Java SE (Java Standard Edition), Java EE (Java Enterprise Edition). Vrstvu medzi Java aplikáciou a operaˇcnýmsystémom tvoria dva hlavné kompo- nenty platformy: JVM a Java API (Java Application Programming Inter- face). [1] 1.2 Java ako jazyk Pod pojmom Java sa ˇcastooznaˇcujeskôr programovací jazyk Java. Ide o objektovo-orientovaný jazyk, so statickým typovaním. Syntax jazyka je inšpirovaná syntaxou jazyka C a C++, je elegantná, s dôrazom na pre- hl’adnost’ a ˇcitatel’nost’. Jazyk je urˇcenýna programovanie širokého spek- tra aplikácií (od mobilných zariadení po robustné serverové aplikácie). Java používa automatickú správu pamäte, tzv. garbage collector, a ne- umožˇnujeprogramátorovi priame adresovanie pamäte. Vd’aka tomu je vývoj aplikácií pohodlnejší a má menší potenciál na robenie chýb a vznik bezpeˇcnostnýchdier. Program napísaný v jazyku Java sa pomocou kompilátora (javac) kom- piluje na tzv. Java bytecode. Bytecode je následne vykonávaný v Java Vir- tual Machine. Java kompilátor produkuje rovnaký bytecode pre každú platformu. Java je multiplatformový jazyk – program v ˇnomnapísaný sa dá spustit’ na každej platforme pre ktorú existuje JVM. 1.2.1 Java API Aby bol Java program naozaj multiplatformový, programátor má k dis- pozícií Java API (application programming interface – rozhranie pre prog- ramovanie aplikácií), Java program nemôže používat’ priamo funkcie operaˇcnéhosystému, pretože by to porušilo multiplatformovost’. Java API je implementované pomocou Java Class Library (oznaˇcujesa aj ako Java Core Libraries) – ide o súbor knižníc, ktoré poskytujú bežné funkcie na ul’ahˇceniepráce pre programátora (napr. práca s textom, dátové štruk- túry, regulárne výrazy a mnoho d’alších) a navyše slúžia ako adaptér pre špecifické funkcie operaˇcnýchsystémov. JVM spolu s knižnicami tvoria 2 1. JAVA JRE (Java Runtime Environment) – prostredie potrebné na spúšt’anie Java aplikácií. 1.2.2 Java Virtual Machine JVM je prostriedok na vykonávanie Java bytecode a to dvoma možnými spôsobmi – interpretáciou alebo prekladom na natívny kód pomocou Just In Time prekladaˇca1. V súˇcasnýchverziách JVM sa používa druhá mož- nost’. Java bytecode nemusí nutne vzniknút’ pomocou kompilátora javac, existuje množstvo iných kompilátorov pre rôzne jazyky, napr. Python (Jython), Ruby (JRuby). Tieto kompilátory preložia zdrojový kód v da- nom jazyku na Java bytecode. Navyše vzniklo niekol’ko jazykov ako do- plnky k jazyku Java, ktoré sú pôvodne urˇcenépre JVM, napr. Groovy a Scala. JVM je esenciálnou ˇcast’ou Java platformy a na implementácií JVM priamo závisí výkon Java aplikácií. Práca sa bude venovat’ JVM HotSpot (Oracle) a J9 VM (IBM). 1.2.3 Java Development Kit Java Development Kit (JDK) je súbor nástrojov urˇcenýchpre vývoj a beh softvéru v jazyku Java, teda ide o druh alebo podmnožinu SDK (Software Development Kit). Pod pojmom JDK sa väˇcšinouoznaˇcujeprodukt od firmy Sun, resp. Oracle, existujú ale aj JDK iných firiem, napr. IBM JDK. 1.3 História a vývoj Prvá verzia programovacieho jazyka Java bola zverejnená v roku 1995 [2], tvorcom bola firma Sun Microsystems (v súˇcasnostiodkúpená fir- mou Oracle Corporation), ale Java ako platforma zaˇcalavo firme Sun Microsystems vznikat’ už v 1990 – ako snaha o vytvorenie technológie pre mobilné zariadenia a spotrebiˇce(pod názvami Stealth Project a ne- skôr Green Project). Vtedy bol jazyk Java ešte interným nástrojom firmy pod názvom Oak. Od roku 1994 sa zmenilo zameranie Java platformy na World Wide Web (WWW), inšpiráciou bol nárast popularity tejto služby a predpo- klad jej integrácie do domácich multimediálnych zariadení. Od vzniku po súˇcasnost’ bolo vydaných 8 verzií Java SE (od JDK 1.0 po Java SE 7), jazyk a Java Class Library sa výrazne vyvíjali. Vd’aka snahe o spätnú kompatibilitu medzi verziami je Java dlhodobo považovaná za stabilnú platformu. 1. http://en.wikipedia.org/wiki/Just-in-time_compilation 3 1. JAVA V súˇcasnosti(od verzie 1.4) je vývoj platformy riadený prostredníc- tvom Java Community Process (JCP) – ide o mechanizmus vývoja Java platformy prostredníctvom komunity Java vývojárov. O ˇclenstvov ko- munite môže požiadat’ každý jednotlivec alebo organizácia. Vývoj pre- bieha