初识JVM内存模型
计算机内存模型 在程序运行时,CPU通过访问主存获取数据,但随着CPU的快速发展,CPU访问速度越来越高,硬件无法满足CPU的条件下,大多内存加入了高速缓存机制,不同CPU都有对应的多级(一般为三)缓存,CPU取数时会先按照一级缓存-二级缓存-三级缓存-主存的顺序进行访问,提高了访问速度,但同时不同的CPU的缓存内的数据可能是不一样的,造成CPU与主存不能实现数据同步 JAVA内存模型 JAVA内存模型(Java Memory Model,JMM)是符合计算机内存模型规范的,通过设置内存屏障,屏蔽了不同硬件和操作系统的访问差异的,保证java程序在不同平台都能做到对内存的访问效果一致的机制及规范。 五大内存区域 1.程序计数器 每个线程都有程序计数器,程序计数器用来标识当前线程的程序字节码的行号,java方法运行时,程序计数器保存的是字节码文件的行号,native方法运行时,程序计数器的内容为空,不同的线程拥有其专属的程序计数器,为线程所私有 2.JAVA虚拟机栈 每个方法在运行时都会创建一个栈帧,包括存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。 JAVA虚拟机栈主要用来存储方法参数,方法内部的局部变量,编译期间加载的数据类型和返回地址类型,为线程所私有 3.本地方法栈 与JAVA虚拟机栈作用相似