8.程序计数器(PC寄存器)
程序计数器(pc寄存器)简介
简介
1.它是一块很小的内存空间,几乎可以忽略不记,也是运行速度最快的存储区域
2.在jvm规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期也和线程的生命周期保持一致
3.任何时间一个线程都只有一个方法执行,也就是所谓的当前方法,程序计数器会存储当前线程正在执行的java方法的jvm指令地址:
或者正在执行navicate方法,则是未指定值(undifined)
4.它是程序控制流的指示器,分支,循环,跳转,异常处理,线程恢复等基础功能需要依赖这个程序计数器完成
5.字节码解释器就是读取程序计数器中的值来选取下一条需要执行的字节码指令
6.他是唯一一个在java虚拟机规范中,没有规定任何OutOfMemoryError的区域
垃圾回收:
回收堆和方法区的空间
栈和程序计数器不需要回收
但是栈会有oom的情况发生,例如递归调用导致的java.lang.StackOverflowError:栈溢出异常,一般发生在递归调用里
例子:
1.java.lang.StackOverflowError:栈溢出异常,一般发生在递归调用里
样例代码如下:
方法自己调自己,形成递归死锁,容易将线程栈撑爆!报java.lang.StackOverflowError
public static void main(String[] args) {
diGui();
}
private static void diGui() {
diGui();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)