Semester: summer 2023/24
Lectures: Tuesday, 10:40, S7 (Štěpán Šindelář (Oracle Labs))
Page in SIS: NPRG076
Grading: Graded credit


May 21, 2024 — Published resources for lecture #7, there is no quiz this time

May 7, 2024 — Published resources and quiz for lecture #6

May 1, 2024 — Published resources and quiz for lecture #5

Apr 25, 2024 — Published resources and coding task from the Week #9 lab and Week #10 lab

Apr 11, 2024 — Published slides, resources and quiz for lecture #4

Apr 2, 2024 — Published third coding task from the Week #7 lab

Mar 28, 2024 — Published slides, resources and quiz for lecture #3

Mar 19, 2024 — Published second coding task from the Week #5 lab

Mar 12, 2024 — Published bonus coding task, quiz and resources for lecture #2

Feb 27, 2024 — There will be no lecture on Week #3 (March 5). Next lecture will be on March 12 2024.

Feb 27, 2024 — Published first coding assignment from the Week #2 lab.

Feb 20, 2024 — Published quiz and resources for lecture #1, created individual student repositories for enrolled students, and the Forum project for course-related communication.

Show all...


Introduction to the operation and implementation of virtual machines and managed runtime environments. Can Java be faster than C? Is interpretation ever better than just-in-time compilation? Apart from identifying and cleaning up unreachable objects, what does the garbage colletor overhead consist of?

The course is suitable for students who would like to either specialize in this topic, or expand their awareness of how the systems they normally use work.

Topics covered

  • Introduction to virtual machines and managed runtimes
  • Interpreted execution vs. dynamic compilation
  • Speculative optimizations, partial evaluation
  • Method-level vs. path-based compilation
  • Memory management and object lifecycle
  • Aspects of design and implementation of virtual machines
  • GraalVM, the Truffle framework and their practical application


The course will alternate between lectures and labs, with lectures covering generic topics and labs focusing on practical problems. The implementation language for the labs is Java. However, only basic knowledge of the most common Java language constructs is necessary.

Credit will be given for:

  • 4 programming assignments (20 points maximum for each)
    • explained and bootstrapped during labs, completed as homework
  • Short “take-home” quiz after most of the lectures (20 points maximum for all quizzes)

The final grade is determined by the percentage of points gained from all assignments as shown in the following table:

≥ 87% 1
≥ 73% 2
≥ 60% 3
< 60% fail

All course work needs to be submitted though your (course-specific) personal repository.


The course uses a GitLab issue tracker in a dedicated Forum project repository as the primary means of communication.

Please use the Forum for any questions or suggestions related to the course, because it will (most probably) be of interest to other students as well. If there is something that needs to be discussed in private, please open a confidential issue in the Forum.

You should either subscribe to receive notifications about new issues (including course-related announcements) or check the issue tracker regularly.