1 jvm的运行参数
1.1 三种参数类型
- 标准参数
-help
-version
- -X参数(非标准参数)
-Xint
-Xcomp
- -XX参数(使用率极高)
-XX:newSize
-XX:+UseSerialGc
1.2标准参数
通过“java -help”可以看到所有标准参数命令
实例1,通过“java -version”查看java的版本号
实例2,通过“java -Dstr=hello Word XXX”(XXX为字节码文件)可以为运行的程序设置系统变量
1.3非标准参数
—X参数在不同的jvm中可能不同
实例1 -Xint,在解释模式下强制JVM执行所有的字节码,会降低运行速度,通常低于10倍或者更多
实例2 -Xcomp,在编译模式下,第一次使用时会强制把所有的字节码编译成本地代码,从而提高最大程度的优化
实例3 -Xmixed是混合模式,是上面两种混合使用有jvm自己决定,这也是jvm的默认模式,也会推荐模式
1.4-XX 参数
-XX也是非标准参数,通常用来jvm调优和debug模式
实例1 “-XX:+DisableExplicitGc” 表示禁用手动调用gc操作,也就是system.gc()无效(这是一种boolean类型的使用方式)
实例2 “-XX:NewRation=1” 表示新生代跟老年代的比值(这是一种非boolean类型的操作)
1.5 -Xms与-Xmx参数
用于设置堆内存初始化的大小,属于jvm调优所以是-XX参数
实例1,-Xmx2084m 等价于-XX:MaxHeapSize,设置jvm最大的堆内存为2018M
实例1,-Xms512m 等价于-XX:InitalHeapSize,设置jvm初始化内存为512M
1.6 查看jvm的运行参数
实例1,运行java命令时打印参数,需要添加-XX:+PrintFlagsFinal参数即可。
参数有boolean类型和数字类型,值的操作符是=或:=,分别代表默认值和被修改的值
实例2,如果想要查看正在运行的jvm就需要借助于jinfo命令查看,jinfo -flag <参数名> <进程id>
2,jvm的内存模型
Young年轻代(分三部分Eden,和 两个survivor)经过几次GC回收仍然存活的对象转移到tenured
Tenured年老区 主要保存生命周期长的对象,一般如果系统使用了application级别的缓存,缓存中的对象往往会转移到该区间
Perm永久区 Perm代主要保存class,method,filed对象,常量池(jdk1.8之后取消了,多了一个元数据区)
Virtual区,最大内存和初始化内存的差值