JVM内存包括若干个数据区域,如线程私有的程序计数器、虚拟机栈、本地方法栈;线程共享的方法区、堆。
JVM组成部分
1)、程序计数器
程序计数器即计算机处理器中的寄存器,指向当前线程正在执行的指令地址,类似于书签。程序计数器占用内存空间非常小,几乎可以忽略不计。它保证了多线程情况下,线程进行切换时,程序能快速找到执行的位置。
2)、虚拟机栈
执行方法时会对应生成一个栈帧,栈帧包括局部变量表、操作数栈、动态连接、返回地址、附加信息。虚拟机栈中存放着一个个的栈帧,当前栈帧存在于虚拟机栈的最上面(最先出栈的位置)。虚拟机栈默认大小为1M,可以使用参数-Xss进行设置大小,eg:-Xss1M,栈内存为1M。
局部变量表:存放方法的参数和局部变量;
操作数栈:方法执行在操作数栈中完成,字节码指令会往操作数栈进行写入(入栈)和取出(出栈);
动态连接:符号引用转换成实际地址的引用;
返回地址:举个例子:方法C存在返回值,则方法C执行完后会将返回