jvm结构
类加载子系统:类加载器 验证 准备 解析
数据运行时数据区 :1.方法区 类信息 方法信息 常量池 2.堆体系:线程共享区域 堆存放new的对象 3.栈 线程私有的 存放线程执行过程的方法信息(存储单位为栈帧) 4.程序计时器 执行线程的行号计时器 5.本地方法栈 native方法栈
执行引擎:将二进制的指令解释给操作系统
栈
虚拟栈: 存储每个线程的栈结构,线程私有 ,栈中存储的元素是栈帧
每个栈帧存储一个线程的方法信息,方法内部的局部变量表(形参,内部变量)方法地址,返回值信息 ,操作数栈,动态链接。
栈帧的结构:本地变量表, 方法地址:动态链接 参数 返回值
栈溢出:递归调用,方法调用太深,导致栈oom溢出
解决栈溢出:递归和方法调用需要控制深度,通过动态规划等其他算法来替代递归算法
调用栈的大小:-Xss2m
堆
堆结构
堆线程是共享的,存放new出来的对象
新生代:年轻代 1.伊甸区 2.幸存者区0 from区 3.幸存者1 to区
老年代: 养老区 old
jvm常用参数
-Xss1m: 设置栈的大小为1m
-Xms500m:设置jvm初始堆大小
-Xms和-Xmx设置的值一样 (避免出现程序运行期间动态申请内存)<