jvm学习-(1)

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区,最大内存和初始化内存的差值

原文地址:https://www.cnblogs.com/wangpengtao/p/10422200.html