Jvm

Prowadzący: Tomasz Jędrzejewski

Warsztaty bez czegoś o kompilacji/interpretacji to nie warsztaty. Tym razem wyjdziemy poza akademickie rozważania i przyjrzymy się budowie i działaniu chyba najbardziej znanej maszyny wirtualnej świata - Java Virtual Machine stanowiącej serce języka Java, ale nie tylko.

Czego się dowiesz?

W trakcie trzydniowego bloku przyjrzymy się szczegółowo architekturze JVM, strukturze kodu bajtowego Javy, a także mechanizmom i technikom stosowanym w rzeczywistych implementacjach związanym z wykonywaniem, optymalizacją oraz bezpieczeństwem. Dowiemy się m.in.:

  • dlaczego Java już nie jest tak powolna, jak kiedyś i dlaczego nie zawsze jest tak szybka, jak kod maszynowy,
  • jak działają wydajne algorytmy odśmiecania pamięci,
  • ile tak naprawdę jest procent kodu bajtowego Javy w kodzie bajtowym Javy,
  • dlaczego aplety umieszczane na stronach internetowych nie zagrażają naszemu komputerowi i dlaczego zagrażają, jeśli twórcą naszej implementacji maszyny wirtualnej jest Microsoft :)
  • jak ręcznie hackować kod bajtowy JVM?

Warsztaty będą mieć charakter praktyczny. Po krótkim teoretycznym wprowadzeniu do architektury maszyny wirtualnej pozostałe aspekty i właściwości będziemy poznawać, pisząc niewielkie programiki do hackowania kodu bajtowego oraz zajeżdżania JVM, oraz obserwując efekty działania. Będzie sporo miejsca na dyskusje, analizy i pytania.

Poziom trudności

  • Poziom trudności: średniozaawansowany
  • Dla licealistów: jak najbardziej (tematyka + poziom zaawansowania)
  • Dla studentów: również (tematyka)

Czy wiedza ta jest przydatna?

Zdecydowanie! Jeżeli programujesz w Javie, dzięki blokowi zyskasz nowe spojrzenie na wiele aspektów tego języka. Zdobyta tu wiedza ułatwi Ci debugowanie aplikacji, ich optymalizację, a także pomoże w tworzeniu własnych. Równie cenne doświadczenia wyniosą osoby zainteresowane tworzeniem własnych interpreterów dzięki zapoznaniu się z rzeczywistymi, sprawdzonymi w boju koncepcjami.

Wymagania dla uczestników

Blok poświęcony jest maszynie wirtualnej Java, a nie językowi Java. Dlatego do uczestnictwa w bloku wymagana jest jedynie:

  • umiejętność programowania w ogóle,
  • podstawowa znajomość programowania obiektowego (pojęcie klasy, obiektu, dziedziczenia, zakresy widoczności itd.) - aczkolwiek im więcej wiesz, tym lepiej,
  • znajomość dowolnego języka programowania, który da się skompilować na maszynę wirtualną Javy, na przykład:
          • Java
          • Python (implementacja na JVM: Jython)
          • Ruby (implementacja na JVM: JRuby)
          • Groovy
          • Scala
          • Clojure (dialekt Lispa)
          • Erlang (implementacja na JVM: Erjang)
  • W razie wyboru języka innego niż Java należy upewnić się, że umiemy w nim ładować i wykorzystywać klasy z biblioteki standardowej Javy; będzie to nam potrzebne, abyśmy byli w stanie używać biblioteki do manipulacji kodem bajtowym.

Kwalifikacja

Do napisania jest jedno zadanie kwalifikacyjne sprawdzające wiedzę z wymagań:

  • Zaimplementuj w postaci prostej klasy algorytm przeszukiwania binarnego tablicy dowolnych obiektów.
  • Klasa musi implementować interfejs, który dostarczam w postaci pliku JAR. Plik można pobrać stąd: binsearch.jar
  • Dodatkowo, napisz prosty program demonstrujący działanie algorytmu.
  • Algorytm należy zaimplementować samodzielnie!
  • Zadanie należy wykonać w dowolnym języku, który da się skompilować na maszynę wirtualną Javy: Java, Groovy, Scala, Clojure, Ruby, Python. Zalecane jest wykorzystanie języka, którego będziesz używać w trakcie zajęć.

Specyfikacja interfejsu, dodatkowe wskazówki, zasady oceniania oraz dodatkowa literatura znajduje się w poniższym dokumencie PDF: jvm_kwalifikacja.pdf

Rozwiązania należy wysłać w postaci spakowanego kodu źródłowego przy pomocy aplikacji warsztatowej.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License