也学习Java/JVM/GC (二)

二、JVM的堆结构及参数配置

对于开发人员来说,最多接触的就是程序启动参数的设置。
程序的启动参数对系统具有至关重要的影响。其中包含堆大小的设置、年轻代大小、年老代大小,
Perm区等大小,以及垃圾回收算法,年轻代的垃圾回收算法,年老代垃圾回收算法等。

1、JVM的堆结构如下图所示:

这里写图片描述

从上图可见,JVM的堆分为eden、s0、s1、old generation和perm五个部分。
新创建的对象会被分配到eden区域,当eden区域满后会触发ygc,将对象复制到S0区,
S1中存活的对象也会复制到S0区。始终保持一个survivor区域为空,持续此过程。
年老代存放的是年轻代survivor满后触发ygc后仍然存活的对象。当eden区满后,会将对象存放到survivor中,
如果内存分配在新生代没有足够空间时,直接在年老代分配,当年老代没有足够的空间时会报OutOfMemoryException。
perm是存储程序类结构,静态变量等的容器。

2、JVM参数设置

标准参数:

-client:
    以client模式启动JVM,在32位机器上使用。64位机器上忽略此参数。

-server:
    以server模式启动JVM。

-agentlib:*libname*[*=options*]:
    根据名字加载本地库,例如:
    -agentlib:hprof
    -agentlib:jdwp=help

-agentpath:*pathname*[*=options*]:
    根据路径加载本地库。
-classpath *classpath*
-cp *classpath*
    声明目录、文件和压缩包的列表来寻找类文件。
    classpath使用“:”分割(windows使用“;”分割)。声明-classpath或-cp会覆盖环境变量的CLASSPATH的设置。
    如果没有使用-classpath和-cp,并且没有设置CLASSPATH,类路径会默认使用当前目录;
-Dproperty=*value*
    设置系统属性值
-d32
    在32位的环境中运行应用。如果没有安装32位的环境或者不支持32位的环境就会报错。
-d64
    运行在64位的环境中。如果使用了-client 参数会忽略-d64这个参数。
-disableassertions[:*package name* "..." | :*class name*]
-da[:*package name* "..." | :*class name*]
    禁用断言,默认开启。
-enableassertions[:*package name* "..." | :*class name*]
-ea[:*package name* "..." | :*class name*]
    开启断言,默认关闭。
-enablesystemassertions
-esa
    为系统类开启断言(设置系统类默认开启断言)。
-disablesystemassertions
-dsa
    禁止系统类断言
-help or -?
    显示帮助信息并退出
-jar
    执行包装在jar文件中的程序。第一个参数是jar文件的名称。想要这个选项起作用,
    JAR文件中的描述文件必须包含一行主类文件名字(*classname*)。主类文件名字中必须有main的静态启动方法。
-javaagent:jarpath[=*options*]
    加载java程序语言代理。
-showversion
    展示jvm版本,通-version.
-verbose
-verbose:class
    这是加载的每个类信息。
-verbose:gc
    报告每次gc时间的信息。
-verbose:jni
    报告本地方法信息,

行为参数

-XX:-AllowUserSignalHandlers
    允许为java程序安装信号处理器。
-XX:AltStackSize=16384
    更改信号栈大小。
-XX:-DisableExplicitGC
    禁止在程序中调用System.gc()。
-XX:+FailOverToOldVerifier
    当类型校验失败时,回到老的方式校验。
-XX:+RelaxAccessControlCheck
    在校验器中放松对访问控制的检查。
-XX:+ScavengeBeforeFullGC
    使ygc优先于fgc。
-XX:+UseConcMarkSweepGC
    为年老代使用并行标记交换垃圾回收。
-XX:+UseGCOverheadLimit
    使用一项政策,限制的花在 GC 引发内存不足的错误之前的 VM 的时间比例。
-XX:-UseParallelGC
    使用并行垃圾收集进行清理。
-XX:-UseParallelOldGC
    为fgc设置并行垃圾收集器。
-XX:-UseSerialGC
    使用串行GC。

性能参数

-Xmnsize or -XX:NewSize
    设置年青代大小
-Xmsn
    设置堆的初始化大小
-Xmxn
    设置堆的最大值
-Xprof
    配置文件正在运行的程序,并分析数据发送到标准输出。此选项使用在开发环境。
-Xssn
    设置线程栈大小。
-XX:MaxGCPauseMillis=*n*
    设置GC暂停的最大时间。
-XX:CompileThreshold=10000
    通过JIT编译器,将方法编译成机器码的阀值,可以理解为调用方法的次数
-XX:LargePageSizeInBytes=4m
    为java堆设置最大页大小
-XX:MaxHeapFreeRatio=70
    GC后,当JVM堆使用率大于70%时进行扩张。
-XX:MaxNewSize=size
    新生代的最大值。
-XX:MaxPermSize=64m
    年老代的最大值。
-XX:MinHeapFreeRatio=40
    GC后,当JVM使用率小于40%进行收缩。
-XX:NewRation=2
    新生代和年老代的比率。
    2代表着 新生代/年老代=1/2.
-XX:NewSize=2m
    默认新生代的大小。
-XX:SurvivorRatio=8
    eden和survivor的比率。8代表着suivivor和eden的比率为8:1(2个survivor)。
-XX:TargetSurvivorRation=50
    survivor空间使用占比。
-XX:ThreadStackSize=512
    线程栈的大小。
-XX:UseBiasedLocking
    开启偏向锁。
-XX:+UseFastAccessorMethods
    使用优化过的原生类型get

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值