二,硬件和操作系统底层知识

总结:
{内存可见:lock总线锁+缓存锁+mesi协议
指令重排:lock总线锁+jvm内存屏障}

乱序执行:国外博客: https://preshing.com/20120515/memory-reordering-caught-in-the-act/
jvm/jmm/Disorder.java
禁止乱序

CPU层面:Intel -> 原语(mfence lfence sfence) 或者锁总线

JVM层级:8个hanppens-before原则 4个内存屏障 (LL LS SL SS)

as-if-serial : 不管硬件什么顺序,单线程执行的结果不变,看上去像是serial

dup:复制一下,防止栈丢失
inwokespecial:执行到这里m=8
为什么dcl要加voliate:创建过程有一个中间态,new到一半会发生指令重排(先执行astore_1再执行inwokespecial)第二个线程判断不为空实际只取到对象中间状态

禁止指令重排:
在这里插入图片描述
一, cpu层级
如果是intelcpu:
1.硬件层面:
(1):三条汇编原语l奋s s奋s()Intel -> 原语(mfence lfence sfence) :只有英特尔cpu可以
(2):lock锁总线(lock是老大,lock (寄存器)+0啥也没做 ) 所有cpu,所以用lock

2.软件层面:
software Locks 通常使用了内存屏障或者原子指令来实现

二,
JVM层级:8个hanppens-before原则 4个内存屏障 (LL LS SL SS)

voliate:硬件层面实现,没有用原语,直接用锁(lock总线锁 +jvm内存屏障 )
voliate:修饰一个类,官方没有查到,new出来的内存空间,前后都加屏障
在这里插入图片描述
(synchonized,cas都是lock comxchang ,分清楚,一个是有个升级过程,一个是比较替换过程)
面试题:使用队列(sig)
合并写技术
UMA:多个cpu共享一个内存
在这里插入图片描述
NUMA:优先访问自己内存,通过总线再访问别家内存
ZGC - NUMA aware

分配内存会优先分配该线程所在CPU的最近内存

软件与硬件结合:

用户态与内核态

级别不同 r0级 指令 r3级指令

内核态:读磁盘,内存 ,创建一个线程 ring0级

用户态:应用层面 ring3级 jvm程序,各种程序

六,进程,线程,纤程

面试高频:进程和线程有什么区别?

答案:进程就是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。专业:进程是OS分配资源的基本单位,线程是执行调度的基本单位。分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值