jvm 栈
每当启动一个新线程时,Java虚拟机都会为它分配一个Java栈。Java栈以帧为单位保存线程的运行状态。虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈和出栈。
某个线程正在执行的方法被称为该线程的当前方法,当前方法使用的栈帧称为当前帧,当前方法所属的类称为当前类,当前类的常量池称为当前常量池。在线程执行一个方法时,它会跟踪当前类和当前常量池。此外,当虚拟机遇到栈内操作指令时,它对当前帧内数据执行操作。
每当线程调用一个Java方法时,虚拟机都会在该线程的Java栈中压入一个新帧。而这个新帧自然就成为了当前帧。在执行这个方法时,它使用这个帧来存储参数、局部变量、中间运算结果等数据。
上面提到了“虚拟机只会直接对Java栈执行两种操作:以帧为单位的压栈和出栈。”
想了一下这地方还是上图吧,结合栈溢出放下面了。
栈溢出:
下面这个就是对应着上面代码运行时栈所做的操作,因为循环调用,他的栈针就会不断进栈,最后导致没有空间就会抛出异常 栈溢出。