JVM笔记

栈帧是栈里面存储的基本单位

一个线程对应一个虚拟机栈

一个虚拟机栈中有很多栈帧

一个栈帧对应一个方法

栈帧里面有局部变量表 、 操作数栈 、动态链接 、返回地址 、一些附加地址

操作数栈在方法创建的时候为空 动词就是操作栈

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. 通知

下部

  创建多个线程,调用资源类的操作方法

  第四步 防止虚假唤醒问题

你可能感兴趣的:(JVM笔记)