多线程part9——线程运行原理
栈和栈帧
JVM由堆、栈、方法区;栈内存就是给线程使用,当每个线程启动后,虚拟机就会为其分配一块栈内存
每个栈由多个栈帧(Frame)组成,对应每调用一次方法调用时所占用的内存
每个线程中只能有一个活动栈帧,对应当前正在执行的方法
线程上下文切换(Thread Context Switch)
由于一些情况,CPU不再执行当前的线程,转而执行另一个线程的代码
被动:1.线程的CPU时间片用完,将使用权交给其他线程
2.垃圾回收
3.有更高优先级的线程需要运行
主动:线程自己调用了sleep、yield、wait、join、park、synchronized、lock等方法
当上下文切换发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态
java中对应的概念是程序计数器(Program Counter Register)作用是记住下一条jvm指令的执行地址,是线程私有的
——状态包括程序计数器、虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等
——Context Switch 频繁发生会影响性能,这使得要选择合适的线程数,以避免这种情况的发生