JVM内存模型
JVM 内存结构
- 每个线程只能访问自己的线程栈
- 所有引用类型的java对像,都会存储在堆内存中
- 堆内存加线程栈->堆栈
- 方法中使用的原生数据类型和对象引用地址在栈上存储;
- 对象、对象成员与类定义、静态变量在堆上
- 堆内存又称为”共享堆”;堆中的所有对象,可以被所有线程访问,只要他们能拿到对象的引用地址
JVM 内存整体结构
JVM 堆内存结构
- S0和S1在任意时刻,一个是空的
- 类的元数据,常量池常量,方法区,jit
- java8将堆中的持久代换名字为Metaspace(元数据)
JMM
JVM启动参数
查询命令
jps -v
jps -m
启动命令
java [options] classname [args]
java [options] -jar filename [args]
启动参数
-
开头:标准参数,向后兼容-D
开头:设置系统属性-X
开头:非标准参数,不保证向后兼容,通过java -X
查看-XX
开头:非稳定参数,专门用于控制JVM的行为-XX:+-Flags
形式,是对布尔值进行开关-XX:key=value
形式,指定某个选项的值
分类
- 系统属性参数
- 运行模式参数
- 堆内存设置参数
-Xmx:整个内存的60%-80% - GC设置参数
java8 默认的GC是:串行gc –XX:+UseParallelGC - 分析诊断参数
- JavaAgent参数