个人在此郑重声明这只是本人的学习心得 若是有不对的地方 欢迎在下方指出 或者私信我指出
1.计算机cpu的运行,在时钟发生器的震荡下一次次的进行。
2.缓存行:根据不同cpu的读取机制,进行缓存行的读取,英特尔cpu是64个字节,在jdk1.7中使用了很多long padding来提高效率。在jdk1.8中,新出了@Contended注解,可以根据不同的cpu进行缓存行补齐的操作,在jdk1.8的底层进行了对这个注解的操作,但是需要在JVM运行的时候添加-XX:-RestrictContended。
3.线程的乱序执行: 在我们java的线程中,有乱序执行的存在,在不改变当前线程的最终执行结果,会存在一定的乱序现象。禁止乱序,在cpu层面有锁总线,java层面有8个hanppens-before原则 4个内存屏障 (LL LS SL SS)。
4.OS:微内核 (小,占用资源少)- 弹性部署(需要就多来几台,不需要就撤) 5G IoT。 (可以联想现在的分布式 ,发散一下思维)
5.用户态与内核态:cpu指令分级别,内存态在0级别,用户在3级别,我们的程序属于用户层级,对于系统的关键访问,需要经过kernel的同意,保证系统健壮性。
6.进程是OS分配资源的基本单位,独立的内存空间。
7.线程是执行调度的基本单位,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间),线程执行在内存态,不停的切换0 - 3也是会消耗资源的。
8.纤程现在是在线程中的,执行在用户态,内存中,速度快,占用内存小,切换和调度不需要经过OS(java内置现在不支持纤程)。
9.进程调度:普通进程采用CFS(Completely Fair Scheduler)时间片分配,实时进程优先级分高低 - FIFO (First In First Out),优先级一样 - RR(Round Robin)。