栈与栈帧
Java Virtual Machine Stacks(Java 虚拟机栈)
每个线程启动后,虚拟机都会为其分配一个栈内存。
每个栈由多个帧组成,对应着每次调用是所占用的内存。
每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法。
线程上下文切换
因为一些原因,cpu不在执行当前的线程2,转而执行另一个线程的代码。
- 线程的cpu时间片用完
- 垃圾回收
- 有更高优先级的线程需要运行
线程自己调用了sleep,yield,wait,park,synchronized,lock等程序当上下文切换发生时,Java虚拟机就会通过程序计数器调用另一个线程,实现线程切换。