也学习Java/JVM/GC (二)

来源:互联网 发布:mac制作win7安装盘教程 编辑:程序博客网 时间:2024/03/28 21:17

二、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