JVM虚拟机的内存主要分为五个部分
提醒自己 不能因为方法区的名字而想当然
实际上方法都存在栈里面
方法区只是存放class字节码文件和static修饰的变量
方法区 又叫静态区(存放着可供全局使用的static修饰的变量) 存放着class字节码文件
方法区中包含的都是在程序中永远唯一的元素
栈 每个方法在执行前虚拟机都会为他创建一个栈帧 然后把该栈帧入栈
栈 的特点是 先入后出
方法执行完后 虚拟机自动将方法的栈帧进行出栈操作 并销毁
本地方法栈 存放的都是本地方法 大多是直接调用系统资源功能的方法 native修饰
堆 所有用new关键字创建的对象都存在堆里面
程序计数器 可以理解为代码的行号计数器 用来记录程序执行到哪里
栈
概念 就是一种数据结构 可以抽象为一个容器 存放栈帧
特点 先入后出 联想穿鞋需要先穿袜子 , 但是脱鞋时后脱袜子
入栈 方法执行前创建栈帧 并放入栈
栈顶 最后入栈的栈帧就是栈顶元素 穿鞋时候最外面的鞋子
栈底 相对 第一个入栈的元素 个人理解是main方法是栈底
出栈 方法执行完毕 虚拟机对栈帧执行出栈并销毁操作
方法内定义的变量都存在随方法执行时所产生的各自的栈帧里面 互不影响