目录
1 关于自动内存管理
- Java是 由jvm来管理内存,包括自动分配以及自动回收 ,因此它不容易出现内存泄漏和内存溢出问题。
- C/C++,由程序员手动管理内存,手动完成:使用前申请内存,使用后释放内存。
2 运行时数据区域
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间。
Java虚拟机所管理的内存 包括以下几个运行时数据区域:

2.1 程序计数器
- 程序计数器(Program Counter Register): 存储当前线程所执行的字节码指令的内存地址 。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。【 通过PC来寻找下一条要执行的指令 】。
- 程序计数器是线程私有的 。cpu通过轮流分配时间片来执行线程,为了线程切换后能恢复到正确的执行位置,显然 每个线程都需要有一个独立的程序计数器 。
- 如果线程正在执行的是一个Java方法,PC记录的是正在执行的字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空。【todo 为什么本地方法时为空】