也学习Java/JVM/GC (二)
2016-09-22 16:42
232 查看
二、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
相关文章推荐
- java基础学习JVM中GC的算法
- java学习(5),JVM内存模型以及GC回收算法
- JVM学习-----java7与Java8新生代GC发生了什么
- 【Java】深入理解JVM学习笔记(三) —— GC收集器和内存分配
- 也学习Java/JVM/GC(一)
- JVM学习(4)——全面总结Java的GC算法和回收机制
- 学习笔记:Java的一些基础小知识之JVM与GC
- 也学习Java/JVM/GC (三)
- JAVA学习之JVM加载class
- JVM学习之:GC的算法的具体实现(垃圾收集器)
- JavaSE_1.2 JAVA中JVM和GC两种核心机制的简单认识
- JAVA中JVM的GC日志解析
- 揭开IBM Java JVM GC实现的神秘内幕
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- java之jvm学习笔记四(安全管理器)
- jdk的配置和JVM内部原理 java 基础学习笔记 第一天
- Java分布式应用学习笔记02再谈JVM
- java之jvm学习笔记二(类装载器的体系结构)
- JVM内存大小设置[JAVA学习笔记]
- JVM学习之垃圾回收(GC:garbage collection)