栈帧是栈里面存储的基本单位
一个线程对应一个虚拟机栈
一个虚拟机栈中有很多栈帧
一个栈帧对应一个方法
栈帧里面有局部变量表 、 操作数栈 、动态链接 、返回地址 、一些附加地址
操作数栈在方法创建的时候为空 动词就是操作栈
push 把值放到操作数栈中
load_1 从变量表中取出数据放到操作数栈
store 从操作数栈中取出数据到变量表中
一个进程对应一个JVM实例
一个进程有多个线程
一个JVM有一个运行时数据区
设置栈大小的指令
-Xss 256k
设置堆空间大小
-Xms 初始堆空间大小(新生代+老年代)
-Xmx 最大堆空间大小
-XX:+PrintGCDetails 显示堆区的数据
-NewRatio: 设置新生代与老年代的比例。默认值是2
-XX:SurvivorRatio:设置新生代Eden中eden区与Survivor区的比例
-XX:-UseAdaptiveSiePolicy :关闭自适应内存分配
※ 测试堆空间常用的JVM参数
-XX:+PrintFlagsInitial 查看所有参数的默认值
-XX:+PrintFlagsFinal 查看所有的参数的最终值
-Xms 初始堆空间内存(默认为物理内存的1/64)
-Xmx 最大堆空间内存(默认为物理内存的1/4)
-Xmn 设置新生代的大小(初始值及最大值)
-XX:NewRatio 配置新生代与老年代在堆结构的占比
-XX:SurvivorRatio 设置新生代中的Eden和s0/s1空间的比例
-XX:MaxTenuringThreshold 设置新生代垃圾的最大年龄
-XX:+PrintGCDetails 输出详细的GC处理日志
-XX:HandlePromotionFailure 是否设置空间配置担保
-XX:Metaspacesize=100m
-XX:MaxMetaspacesize=100m
-XX:UseG1GC 启用G1GC
※ JDK1.8 堆存放静态变量 字符串常量池 对象
方法区 存放 类型信息 域信息 方法信息 代码缓存 运行时常量池
多线程编程步骤
上部
第一部步 创建资源类,在资源类创建属性和操作方法
中部
第二部 在资源类操作方法
1. 判断
2. 干活
3. 通知
下部
创建多个线程,调用资源类的操作方法
第四步 防止虚假唤醒问题