Java Runtime Lab / curriculum
学过,跑通,解释清楚。
一门聚焦的历史课程、按版本标注的 Java 官方文档、六个原创可执行练习;不转载大学作业解答。
核验日期:2026 年 11 月 14 日。历史课程、已发布 JDK 文档与可选 preview 阅读分别标注;不把计划课程说成已开放。
精选课程与访问条件
Massachusetts Institute of Technology · 6.172 · Performance Engineering of Software Systems
Fall 2018 · 课程语言: C · 核验: 2026-11-14
先修: 6.004 Computation Structures; 6.006 Introduction to Algorithms; 6.031 Software Construction (formerly 6.005)
用于性能测量、并发推理与工作量分析。Java 25 的契约由下方原始资料补足。
公开阅读:归档 OCW 讲义、视频、阅读与作业不需注册或付费。阅读不等于 MIT 注册学生,也不授予学分或证书。校园招生、选课和学费是另一回事,本实验不提供注册服务。
六个原创可执行练习
先执行 doctor → build。每个命令在本地启动真实 Java、核验完整记录,再围绕一个问题输出结果。使用 --record 和相应保存 JSON 可只检查记录。无需 API key。
先测生命周期,再谈性能
Lecture 10: Measurement and Timing · Java SE 25: RecordingFile
先预测: 哪些计数应精确重现?哪些时间戳会变化?
python3 scripts/learn.py measure观察并解释: 读取真实 JFR 计数与任务顺序。逐轮比较,不用平均值掩盖失败路径。
JFR、调度与 sleep 会影响耗时;这不是 JMH 吞吐基准。
限制执行,并跟踪提交者
Lecture 6: Multicore Programming · Java SE 25: ThreadPoolExecutor
先预测: CallerRuns 的 overflow 是否代表请求被拒绝?
python3 scripts/learn.py pool观察并解释: 检查提交 = 完成 + 拒绝,以及 callerRuns。跟踪任务 5 的提交到终态。
C 语言课程提供并发基础;拒绝策略的具体行为以 Java API 为准。
线程便宜,下游槽位有限
Lecture 6: Multicore Programming · JEP 444: Virtual Threads · Java SE 25: Semaphore
先预测: N=7、C=2 时,先预测各策略的下游峰值、等待数与拒绝数。
python3 scripts/learn.py capacity --requests 7 --capacity 2观察并解释: 真实虚拟线程:无限制峰值 7;排队峰值 2、最多等待 5;拒绝策略完成 2、拒绝 5。检查每个任务和许可归还。
门闩强制重叠。容量是本地声明的资源界限,不是远程服务吞吐测量。等待数仅因有限突发而有界。
取消等待者与许可持有者
Java SE 25: Future · Java SE 25: Semaphore · Vanderbilt archive: Managing the Java Lifecycle — Stopping a Java Thread via an Interrupt
先预测: cancel(true) 后,isCancelled 为 true 时下游槽位是否还可能被占用?
python3 scripts/learn.py cancel观察并解释: 等待中取消从未进入下游。协作任务归还许可;忽略中断的对照在 cancel_snapshot 时仍占用许可。实际退出后才归还全部许可。
35 毫秒只限制 Future.get 等待,不是端到端 deadline。忽略中断的对照有有限 watchdog。
同时统计成功与工作放大
Lecture 2: Bentley Rules for Optimizing Work · Java SE 25: Future
先预测: 哪个策略花费更多下游尝试?哪个策略会主动暴露请求失败?
python3 scripts/learn.py retry观察并解释: 比较相同失败计划下的尝试数、成功与失败请求。通过 lab.py run 修改 --failures 并解释工作量变化。
第 2 讲用于工作量分析,不是重试算法教学。本实验使用有限合成失败,不是级联故障模型。
用独立证据质疑记录
Lecture 7: Races and Parallelism · Java SE 25: Virtual Threads · JEP 491: Synchronize Virtual Threads without Pinning · Java SE 25: RecordingFile
先预测: 只查汇总能否发现许可泄漏、伪造线程类型或缺失的真实 JFR 转换?
python3 scripts/learn.py evidence观察并解释: 将 JSON 重放为状态机,与另一个 JVM 读取的真实 JFR 场景/转换计数比对,再执行故意损坏记录的反例检查。查看虚拟线程开始/结束与明确的 pinned 计数。
JEP 491 在 JDK 24 改变 synchronized 阻塞行为。未记录 pinned 事件不证明普遍不存在。这不是 LLM 评测。
原始资料清单
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
Vanderbilt 项目是教师归档中的 2020 PDF,所连页面未明确该 PDF 的学期,因此只作补充阅读,不冒充第二门精选课程或当前招生项目。JEP 444 描述的是 JDK 21 历史 pinning 行为;本实验固定版本应结合 JEP 491 与 JDK 25 指南阅读。
迁移到 AI 服务场景
可把每个合成下游槽位理解为一个在途推理请求、连接或本地加速器槽位。学习目标是限制并发,并在实际工作退出时归还资源。本模型不评测模型质量、token 吞吐、供应商限流、网络或账单,也不调用模型或付费 API。