Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JVM: краткий курс общей анатомии

JVM: краткий курс общей анатомии

Никита Липский, Владимир Парфиненко (Excelsior) рассказывают про анатомию JVM.

«Говоря о Java, мы обычно подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.

Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.

В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM в принципе расположены кишки, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.»

Подробности на http://techtalks.nsu.ru

Tech Talks @NSU

October 20, 2015
Tweet

More Decks by Tech Talks @NSU

Other Decks in Education

Transcript

  1. 2&

  2. 3&

  3. Java%class%file%% •  1&класс&<–>&1&классÜфайл& •  Constant&Pool&& – числа,&строки& – указатели&на&классы,&методы,&поля& •  Описание&класса& 8&

    – имя& – модификаторы& – супер&класс& – супер&интерфейсы& – поля& – методы& – атрибуты&
  4. Java%bytecode% Инструкция&берет&свои&операнды&со&стэка&&и&&кладет& результат&на&стэк.&Пример:& 11& 0: iload 3 // загрузить на

    стэк переменную #3! 2: bipush 5 // загрузить на стэк константу 5! 4: iadd! // сложить два операнда со стэка и загрузить
 // на стэк результат! 5: istore 4 // снять значение со стэка в переменную #4!
  5. Программа%для%JVM% Любая&программа&исполняемая&на&JVM&имеет:& •  main&класс& public static void main(String[] args)! • 

    сlasspath&–&список&директорий&и&архивов&(jar&файлов)& •  В&мире&веб&приложений&программа&для&JVM&–&это&веб&сервер& – Tomcat,&GlassFish&и&т.п.& 14&
  6. Java%RunOme% Для&исполнения&программы&на&JVM&одной&JVM&не&достаточно.& Нужен&Java&Runwme&Environment:& •  JVM& •  Платформенные&классы& –  core&классы&(j.l.Object,&j.l.String&и&т.д.)& – 

    Java&standard&APIs&(IO,&NET,&NIO,&AWT/Swing&и&т.д)&&&&& •  Реализация&нативных&методов&платформенных&классов&(OS& specific)& •  Вспомогательные&файлы&(описатели&временных&зон,&медиа& ресурсы&и&т.п.)& 15&
  7. Анатомия%JVM% 16& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  8. Classloading%engine% 17& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  9. Ну%а%если%все]таки%запустить%без%верификации?% $ java -noverify test! ! # A fatal error

    has been detected by the Java Runtime Environment:! Exception in thread "main" java.lang.StackOverflowError! at test.foo(test.j)! at test.main(test.j:3)! #! # Internal Error (javaCalls.cpp:53), pid=8012, tid=16396! # guarantee(!thread->is_Compiler_thread()) failed: cannot make java calls from the compiler! #! # If you would like to submit a bug report, please visit:! # http://bugreport.java.com/bugreport/crash.jsp! ! 27&
  10. ExecuOon%engine% 30& OS&+&CPU& Monitoring& Bytecode& Classloading& engine& Execuwon&engine:& interpreter,&JIT& Threading&

    Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods& Bytecode&Verificawon& & AOT&
  11. Интерпретатор% pc = 0;! do {! fetch opcode at pc;!

    if (operands) fetch operands;! execute the opcode;! calculate pc;! } while (there is more to do);! 32&
  12. Компиляторы% •  Неоптимизирующие& –  “что&вижу,&то&пою”& && •  Простые&оптимизирующие&(пример&HotSpot&Client)& –  Простое&внутреннее&представление&(IR)&

    –  Простые&оптимизации& –  Pros:&быстрая&компиляция&& •  Сложные&оптимизирующие&(пример&HotSpot&Server)& –  Сложный&IR,&более&мощные&оптимизации& –  Pros:&более&оптимальный&код& 33&
  13. Meta%informaOon%subsystem% 38& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  14. %Threading%and%synchronizaOon% 42& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  15. Потоки%и%Java%Memory%Model% 45& // Thread 1:! Shared.data = getData();! Shared.ready =

    true;! // Thread 2:! while (!Shared.ready) {! // wait! }! receivedData = Shared.data;!
  16. Memory%management% 48& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  17. Layout%Java%объекта% Не&специфицируется&JVM,&но&по&факту&требует:& •  Java&Object&header& – Указатель&на&класс& – Монитор&(lock)& – Idenwty&hashcode& – Флаги&для&GC& •  Поля&

    – Могут&быть&переупорядочены&из&соображений&экономии& размера,&выравнивания,&особенностей&целевой&архитектуры& 52&
  18. GC:%advanced%topics% •  Финализаторы%и%слабые%ссылки% •  GC&(safe)&points& •  Точные&vs.&консервативные&GC& •  Способы&борьбы&с&фрагментацией&кучи& • 

    Real&wme&GC& •  Class&GC& •  Базовые&алгоритмы&GC& •  Конкретные&реализации:& –  В&одной&HotSpot&JVM&пять(!)&разных&GC& 72&
  19. Manageability%&%Monitoring% 73& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  20. Абстрактная%JVM% 76& OS&+&CPU& Monitoring& & AOT& Bytecode& Classloading& engine& Bytecode&Verificawon&

    Execuwon&engine:& interpreter,&JIT& Threading& Synchronizawon& Meta& informawon& Memory&management,& Garbage&Collecwon& Nawve&methods&
  21. Реализации%JVM% Совместимые&с&Java&SE&спецификацией:& •  Oracle&HotSpot&& •  Oracle&JRockit&(RIP)& •  IBM&J9& •  Excelsior&JET&

    •  Azul&(HotSpot&based,&но&свой&GC)& •  SAP,&RedHat&(свои&порты&HotSpot&на&разные&платформы)& 77&
  22. Заключение% •  JVM&сложная,&но&жутко&интересная&штука& •  Java&–&золотая&середина&современных&IT&технологий:& –  Подробно&специфицирована& –  Эффективность&помноженная&на&гибкость:&& • 

    типизированность&Java&байтÜкода&позволяет&его&транслировать&в&машинный&код& очень&эффективно& •  при&этом&reflecwon,&indy,&динамическая&загрузка&придает&платформе&высокую& гибкость&и&динамичность& •  Все&реализации&JVM&в&постоянном&развитии&на&острие&науки&и& технологий& 78&