输入标题、正文或标签,查找知识。

最近文档

软件工程 / 构建发布与运行构建环境与持续集成:为什么你电脑上能跑还不够你把收藏功能交给同事,他安装以后却打不开。原来你电脑用的是一个 Node 版本,他用另一个;你本地还有没提交的文件。要交付软件,不只需要源代码,还要让别人按照明确步骤得到能运行的结果。软件工程 / 构建发布与运行部署、发布、回滚与观察:把功能交到用户手里代码已经合并,收藏按钮却没出现在网站上。或者网站更新了,点击时提示找不到数据表。交付涉及代码、配置、数据和流量,不能只用“构建成功”判断完成。本章按一次小发布看这些环节怎样配合。语言基础 / TypeScript跨语言对照TypeScript 独有能力与缺失能力清单这一章适合在学完基础后回查:某个能力是 TypeScript 自己提供的,还是来自 JavaScript、浏览器、Node 或第三方库?先把来源认清,再讨论它擅长什么、缺少什么,就不会把“语言没有内置”误解成“整个生态都做不到”。语言基础语言基础学习路线:以 TypeScript 建立可迁移的编程模型学 TypeScript 时,你会同时遇到 JavaScript 的运行规则和 TypeScript 的类型规则。先把这两件事分清,很多报错就好理解了。按顺序做完前面的练习,再读跨语言对照;对照章节用于解释差异,不要求你同时学会五门语言。后端知识 / 身份权限与安全认证、授权与多租户:登录成功只是第一步用户把地址里的订单号从 42 改成 43,居然看到了别人订单。这不是登录失效,而是资源授权缺失。后端要分别确认调用者是谁,以及这个调用者是否能对这份数据执行当前操作。
1 / 5 · 构建环境与持续集成:为什么你电脑上能跑还不够
↑↓ 浏览 Enter 打开Esc 关闭
Damnatiox
知识文件夹

JVM与并发

现代 Java Backend Engineering 学习路线:JVM与并发

0 子目录5 文档
JVM 与并发:类加载与内存、垃圾收集、线程与任务、可见性与同步、锁与原子操作、线程池与异步、诊断与版本边界

CHAPTER OVERVIEW · 章节概览

先理解代码怎样运行和使用内存,再处理线程协作与可见性;高级并发能力要结合项目使用的 JDK 版本。

本章学习路线

箭头表示建议的学习顺序;先理解问题,再逐步进入实现与实践。

flowchart LR N0["01 类加载与内存"] N1["02 垃圾收集"] N2["03 线程与任务"] N3["04 可见性与同步"] N4["05 锁与原子操作"] N5["06 线程池与异步"] N6["07 诊断与版本边界"] N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6

按顺序学习

5
JVM 与并发:从运行时到生产诊断服务变慢或内存不断上涨时,猜一个 JVM 参数通常不是好的起点。先保留运行条件,再收集线程、内存和 GC 的信息。本节给出学习顺序,让后面的诊断工具都有一个具体要回答的问题。JVM 内存、类加载、字节码与垃圾收集写下 new 之后,对象在哪里分配?一个方法反复调用,执行方式会一直相同吗?JVM 负责处理这些运行细节。下面把编译、类加载、方法执行和垃圾收集连起来看,再介绍怎样观察一个正在运行的进程。Java 并发与多线程:生命周期、同步、锁、线程池、虚拟线程与取消一个线程等待网络结果时,另一个线程可以继续做事;但两个线程一起改同一份数据,也会带来新的问题。本章先把启动、等待和取消讲清,再讨论共享数据。不要把“同时执行”直接等同于“更快”。JMM、线程池、锁、原子类与 CompletableFuture多线程程序中,一个线程写了值,另一个线程何时能看到,不能只凭源码的先后顺序判断。JMM 解释这些约束,锁和原子类帮助我们满足它们。下面再看线程池和 CompletableFuture 怎样组织任务,而不是替代这些规则。Virtual Threads、Scoped Values 与 Structured Concurrency虚拟线程适合用来理解一个新问题:大量任务在等待 I/O 时,怎样降低线程带来的负担?它不负责让计算本身变快。读这一章时,把“同时等多少任务”与“同时算多少任务”分开,再看上下文传递和子任务管理。