JVM笔记 —— Java内存模型和线程

本文深入探讨Java内存模型的细节,包括主内存与工作内存的概念,以及volatile变量的特性。同时,解析了Java中线程调度的机制,包括内核线程与用户线程的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

衡量服务性能的高低,重要指标之一是每秒事务处理数,即一秒内服务端平均能响应的请求总数(TPS)。

主内存与工作内存

Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存取出变量这样的底层细节。此处变量和Java编程中的变量有区别,它包括实例字段,静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,所以不存在竞争问题。

Java内存模型规定了所有的变量都存储在主内存中。每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的变量

工作内存同步回主内存之类的实现细节,Java内存模型定义了8种操作来完成:

lock锁定, unlock解锁,read读取,write写入。作用于主内存变量

load载入 ,use使用 ,assign赋值 ,store存储 ,。作用于工作内存的变量

 

voliatile型变量

当一个变量定义为volatile时,主要有两个特性,第一是保证此变量对所有线程的可见性,但不是原子性,所以仍然要通过加锁

synchronized或者concurrent的原子类来保证原子性。第二是禁止指令重排序优化。

volatile与普通变量的区别是,保证新值能立即同步到主内存,以及每次使用前立即从主内存刷新

 

线程的实现

主要有三种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。

内核线程就是直接由操作系统内核支持的线程,这种线程由内核来完成切换,内核通过操纵调度器对线程进行调度,并负责将线程的任务映射到各个处理器上。

从广义上说,一个线程只要不是内核线程,就可以认为是用户线程

 

JAVA线程调度

线程调度是指系统为线程分配处理器使用权的过程,主要调度方式有两种,分别是协同线程调度和抢占式线程调度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值