java初级程序员和中级程序员的分界的知识点有:Linux、JVM、多线程、设计模式,所以最近开始啃JVM,以下文字留作笔记以供复习。
Java内存模型顾名思义,"模型"表明这是一个虚拟出来的东东,jvm规范虚拟出这个模型的目的主要是为了屏蔽计算机硬件层面的概念,毕竟JVM的目的就是干这个的。
在计算机硬件层面的内存的概念稍微说一点,之前学校里学的都忘得差不多了(其实当初估计也没认真听课)。而且另一方面如今计算机的硬件架构的更新也比较快。硬件系统的内存一般有:CPU寄存器、高速缓存、内存。一般高速缓存又有3级:L1,L2,L3,CPU又有多核,所以硬件本身就是存在内存读写不一致的问题,但是硬件之上的操作系统(操作系统也是一个软件)有自己的解决办法(总线加锁、intel提出的 MESI协议)去保证读写一致,所以操作系统在运行过程中能保证读写一致,保证操作系统运行结果符合预期。
Java的程序是运行在JVM中的,而JVM中的线程最终也会交给硬件CPU去执行。
具体的流程是:我们在使用Java线程,内部会调用操作系统(OS)的内核线程(Kernel-Level Thread),这种线程是操作系统内核(Kernel)直接支持的,内核通过调度器,对线程进行调度,并将线程交给各个CPU内核去处理。
因此Java开发的软件也需要解决因为硬件内存不一致这种问题。
所以JVM中多线程会存在读写不一致的问题,我们的解决办法有哪些呢?
以上说这么多就是为了引出Java内存模型的概念。这就是上面为什么说Java内存模型是一个虚拟出来的东东,目的是为了屏蔽计算机硬件的内