RickLynn Lee / Runtime Lab

Java Runtime Lab / curriculum

Learn it. Run it. Explain it.

One focused historical course, current versioned Java documentation, six original executable exercises. No university assignment solutions are reproduced.

Verified 14 November 2026. Historical course materials and published JDK documents are distinguished from optional preview reading. No planned course is presented as available.

Download searchable registry JSON · Anonymous source-access receipts

Selected course and access

Massachusetts Institute of Technology · 6.172 · Performance Engineering of Software Systems

Fall 2018 · Language: C · Verified: 2026-11-14

Prerequisites: 6.004 Computation Structures; 6.006 Introduction to Algorithms; 6.031 Software Construction (formerly 6.005)

Measurement, concurrency reasoning and work accounting. Java 25 contracts come from the primary resources below.

Public reading: archived OCW slides, videos, readings and assignments require no account or payment. Reading does not enroll you at MIT or award credit/certificates. Campus admission, registration and tuition are separate; this Lab makes no enrollment offer.

Six original executable exercises

Run doctor → build first. Each command starts real Java locally, checks the complete recording, then reports one focused question. Use --record with a matching saved JSON to inspect without rerunning. No API key is needed.

Measure a lifecycle before claiming performance

Lecture 10: Measurement and Timing · Java SE 25: RecordingFile

Predict: Which counts must repeat exactly? Which timestamps may vary?

python3 scripts/learn.py measure

Inspect and explain: Read actual JFR counts and per-path task order. Compare saved repetitions instead of averaging away failed paths.

JFR, scheduling and sleeps affect elapsed time. This is not a JMH throughput benchmark.

Bound execution and follow the submitter

Lecture 6: Multicore Programming · Java SE 25: ThreadPoolExecutor

Predict: Does CallerRuns overflow mean a rejected request?

python3 scripts/learn.py pool

Inspect and explain: Check submitted = completed + rejected and inspect callerRuns. Follow task 5 from submitted to its terminal event.

The C course provides concurrency foundations; rejection-policy behavior is specified by the Java API.

Cheap threads, finite downstream slots

Lecture 6: Multicore Programming · JEP 444: Virtual Threads · Java SE 25: Semaphore

Predict: For N=7, C=2: predict peak downstream occupancy, waiting tasks and rejected tasks for each policy.

python3 scripts/learn.py capacity --requests 7 --capacity 2

Inspect and explain: Real virtual threads: unbounded peak 7; queue peak 2 and waiting peak 5; reject completes 2 and rejects 5. Check every task and restored permits.

The gate forces overlap. Capacity is a declared local resource limit, not a measured remote server throughput. Waiting count is bounded only by this finite burst.

Cancel a waiter and a permit holder

Java SE 25: Future · Java SE 25: Semaphore · Vanderbilt archive: Managing the Java Lifecycle — Stopping a Java Thread via an Interrupt

Predict: After cancel(true), can isCancelled be true while a downstream slot remains occupied?

python3 scripts/learn.py cancel

Inspect and explain: Queued cancellation never enters downstream. A cooperative holder releases its permit; the ignoring control still occupies it at cancel_snapshot. All permits return after actual work exits.

The 35 ms timeout limits Future.get waiting. It is not an end-to-end deadline. The ignore control has a finite watchdog.

Count work amplification as well as success

Lecture 2: Bentley Rules for Optimizing Work · Java SE 25: Future

Predict: Which policy spends more downstream attempts, and which intentionally exposes request failures?

python3 scripts/learn.py retry

Inspect and explain: Compare attempts, successes and failed requests under the same regenerated failure schedule. Modify --failures through lab.py run and explain the changed work.

Lecture 2 motivates accounting for work; it does not prescribe a retry algorithm. This Lab uses finite synthetic failures, not a cascading-outage model.

Challenge a recording with independent evidence

Lecture 7: Races and Parallelism · Java SE 25: Virtual Threads · JEP 491: Synchronize Virtual Threads without Pinning · Java SE 25: RecordingFile

Predict: Would a summary-only checker notice a leaked permit, a forged thread type or missing actual JFR transitions?

python3 scripts/learn.py evidence

Inspect and explain: Replay JSON as a state machine, compare scenario/transition counts with separately read real JFR, then run deliberate corruption checks. Inspect virtual starts/ends and the explicit pinned count.

JEP 491 changed synchronized blocking in JDK 24. Zero recorded pinned events does not establish universal absence. This is not an LLM evaluation.

Primary-source registry

MIT 6.172 syllabus

Prerequisites and course language

course · published · Verified: 2026-11-14

Lecture 2: Bentley Rules for Optimizing Work

PDF linked from the official resource page

lecture · published · Verified: 2026-11-14

Lecture 6: Multicore Programming

PDF linked from the official resource page

lecture · published · Verified: 2026-11-14

Lecture 7: Races and Parallelism

PDF linked from the official resource page

lecture · published · Verified: 2026-11-14

Lecture 10: Measurement and Timing

PDF linked from the official resource page

lecture · published · Verified: 2026-11-14

JEP 444: Virtual Threads

Do not pool virtual threads; delivered in JDK 21

JEP · published · Verified: 2026-11-14

JEP 491: Synchronize Virtual Threads without Pinning

Summary and remaining pinning cases; delivered in JDK 24

JEP · published · Verified: 2026-11-14

Java SE 25: Virtual Threads

Scheduling; JDK Flight Recorder events for virtual threads

official-guide · published · Verified: 2026-11-14

Java SE 25: Semaphore

acquire(), release(), tryAcquire(), fairness

API · published · Verified: 2026-11-14

Java SE 25: Future

get(timeout), cancel(boolean), isCancelled(), isDone()

API · published · Verified: 2026-11-14

Java SE 25: ThreadPoolExecutor

Queuing; rejected tasks; CallerRunsPolicy

API · published · Verified: 2026-11-14

Java SE 25: RecordingFile

readEvent() and hasMoreEvents()

API · published · Verified: 2026-11-14

Vanderbilt archive: Managing the Java Lifecycle — Stopping a Java Thread via an Interrupt

2020 PDF archive, not a verified current offering

supplementary-lecture · published · Verified: 2026-11-14

Java SE 25: StructuredTaskScope

Preview API in this JDK; not compiled or exercised here

optional-preview-reading · published · Verified: 2026-11-14

The Vanderbilt item is a 2020 PDF from the instructor archive; the linked landing pages do not establish an exact semester for that PDF. It is supplementary reading, not a second selected course or a current enrollment offer. JEP 444 describes JDK 21 historical pinning behavior; use JEP 491 and the JDK 25 guide for this pinned runtime.

Transfer to an AI service

Treat each synthetic downstream slot as an in-flight inference request, connection or local accelerator slot. The learning goal is to enforce concurrency and release resources when work actually exits. This model does not evaluate model quality, tokens per second, provider rate limits, networking or billing. No model or paid API is called.

Inspect actual saved bulkhead evidence →