一、JVM运行时数据区
内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作
系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、
分配、管理的策略,保证了JVM的高效稳定运行。
1、线程私有:程序计数器、虚拟机栈、本地方法栈(随着线程的开始和结束)
2、线程共享:堆、方法区(随着虚拟机的启动和创建)
3、线程:在Hostspot JVM里,每个java线程都与操作系统的本地线程直接
映射。当一个java线程准备好执行以后,此时一个操作系统的本地线程也同时创建;
本地线程初始化成功,它就会调用java线程中的run()方法;java线程执行终止后,
本地线程也会回收。
二、程序计数器:
1、作用:PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代
码。由执行引擎读取下一条指令。
2、解释:一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每
条线程都要有一个独立的程序计数器,这类内存也称为“线程私有”的内存。分支,
循环,跳转,异常处理,线程回恢复等都需要依赖这个计数器来完成。
由于Java的多线程是通过线程轮流切换完成的,一个线程没有执行完时就需要
一个东西记录它执行到哪了,下次抢占到了CPU资源时再从这开始,这个东西就是程
序计数器,正是因为这样,所以它也是“线程私有”的内存。
正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令
的地址)。如果还是 Native 方法,则为空。
这个内存区域是唯一一个在虚拟机中没有规定任何 OutOfMemoryError 情况
的区域。(没有GC OOM)



