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 measureInspect 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 poolInspect 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 2Inspect 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 cancelInspect 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 retryInspect 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 evidenceInspect 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
Lecture 2: Bentley Rules for Optimizing Work
PDF linked from the official resource page
Lecture 6: Multicore Programming
PDF linked from the official resource page
Lecture 7: Races and Parallelism
PDF linked from the official resource page
Lecture 10: Measurement and Timing
PDF linked from the official resource page
JEP 444: Virtual Threads
Do not pool virtual threads; delivered in JDK 21
JEP 491: Synchronize Virtual Threads without Pinning
Summary and remaining pinning cases; delivered in JDK 24
Java SE 25: Virtual Threads
Scheduling; JDK Flight Recorder events for virtual threads
Java SE 25: Semaphore
acquire(), release(), tryAcquire(), fairness
Java SE 25: Future
get(timeout), cancel(boolean), isCancelled(), isDone()
Java SE 25: ThreadPoolExecutor
Queuing; rejected tasks; CallerRunsPolicy
Java SE 25: RecordingFile
readEvent() and hasMoreEvents()
Vanderbilt archive: Managing the Java Lifecycle — Stopping a Java Thread via an Interrupt
2020 PDF archive, not a verified current offering
Java SE 25: StructuredTaskScope
Preview API in this JDK; not compiled or exercised here
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.