Jvm运行时,内存区域可以划分为两大部分
1.线程私有(程序计数器,虚拟机栈,本地方法栈)
2.线程共享(堆与方法区)
程序计数器:因为cpu会划分为时间片给多个线程执行,所以需要程序计数器记录下指令执行到具体的位置,当下次线程切换时,从记录的位置继续执行,同时它也是唯一不会发生OOM错误的。
本地方法栈与虚拟机栈在某些jvm虚拟机中合并成一个栈,有些是分开成两个。
虚拟机栈在线程运行时,每执行一个方法,都会对应生成一个栈帧,放入栈中。每个时刻正在运行的方法是虚拟机栈顶部的栈帧,方法的执行就是一个出栈与入栈的操作。虚拟机栈的大小默认为1M,可以使用参数-Xss来进行调整它的大小,比如:-Xss