也学习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
- 也学习Java/JVM/GC (二)
- 也学习Java/JVM/GC(一)
- 也学习Java/JVM/GC (三)
- JVM学习-java垃圾回收(二)-GC日志
- JVM学习和分析(二):GC
- JVM学习笔记二:GC 垃圾回收
- java也谈gc
- java也谈gc
- jvm学习记录:GC
- 学习JVM--垃圾回收(二)GC收集器
- 学习JVM--垃圾回收(二)GC收集器
- Java JVM(二):垃圾回收概念 与 GC 日志
- java jvm GC 参数设置
- IT-java-jvm-gc
- java-jvm-GC
- java-jvm-GC剖析
- java--jvm--GC
- jvm与GC 基本 二
- NHibernate之映射文件配置说明
- RecyclerView实现Listview-1
- 自动化运维工具SaltStack详细部署
- 有向图—拓扑排序,Kosaraju算法
- 冒泡排序
- 也学习Java/JVM/GC (二)
- 从源码入手理解Window和WindowManager
- JavaScript排序之归并排序
- App瘦身最佳实践(分析了微信、淘宝、微博图片文件的放法)
- RPC概念和应用
- RecyclerView的使用教程2
- 第三周 项目3-求集合并集
- kernel 不能找到xz格式的initramfs
- translate与REGEXP