文章目录
1.JVM核心概念及JVM对高并发的支持
JVM是安装在操作系统上的虚拟机,Java代码直接操作的对象就是JVM。因此Java可以实现一次编写,多处运行。
1.1JVM内存区域
- 方法区,堆,虚拟机栈,本地方法栈,程序计数器
前两个所有线程共享
后三个是各自线程私有
1.2JVM内存模型(JMM)
JVM内存划分为主内存和工作内存。
每个线程都存在主内存中,而每个线程还拥有自己独立的线程。可以通过主内存,访问其他线程的私有变量。
1.3使用volatile解决可见与重排序
volatile是JVM提供的一种轻量级的同步机制
- volatile修饰的变量可以被所有线程立即可见:之前说某一线程可通过主内存与其他线程交流。但若给变量加上volatile,则该线程的任何操作对其它线程都是可见的。
- volatile可禁止指令进行重排。
重排是Java为了提高效率对代码进行的优化,不会影响到单线程的运行结果。
典型的双重检验锁就是利用volatile防止指令重排。
但volatile不是线程安全的,它只具有可见性,并不具有原子性。
可以使用原子类型(内部也是