本文参考
 
在一个java应用启动时,我们可以配置其jvm的启动参数,如:

java -jar -Xms4096M -Xmx4096M -Xmn1024M -Xss256K hello.jar [这里可以加args参数传入]

下面我记录了一些常用的JVM参数的配置说明,仅用于记录和简单说明。

一、堆大小设置(堆 = 年轻代 + 年老代+ 持久代)

  • -Xmx3550m设置JVM最大可用内存为3550M。
  • -Xms3550m设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
  若设置初始内存过大,比如-Xms8000m,这都超过了我电脑内存,则会报错
Error occurred during initialization of VM
Unable to allocate 256000KB bitmaps for parallel garbage collection for the requested 8192000KB heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
  若设置初始内存过小,比如-Xms10k,则会报错
Error occurred during initialization of VM
Too small initial heap
  若设置初始内存过小得让gc无法触发,比如-Xms1200k,则会报错。估算gc需要2500K的内存。
Error occurred during initialization of VM
GC triggered before VM initialization completed. Try increasing NewSize, current value 1536K.
  • -Xss128k:设置每个线程的堆栈大小。(JDK5.0以后每个线程堆栈大小为1M)
  • -Xmn1024m:设置年轻代大小为1024m。等效于同时配置下面两个。
    • -XX:NewSize=1024m:设置年轻代初始值为1024M。
    • -XX:MaxNewSize=1024m:设置年轻代最大值为1024M。
  • -XX:PermSize=256m:设置持久代初始值为256M。
  • -XX:MaxPermSize=256m:设置持久代最大值为256M。
  JVM8.0已经没有持久代,若设置则会警告
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=10m; support was removed in 8.0
 

二、垃圾回收器设置(串行收集器、并行收集器、并发收集器 )

     默认情况下JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行智能判断。
 
  串行收集器
  • -XX:+UseSerialGC:设置串行收集器。
  并行收集器(吞吐量优先)
  • -XX:+UseParallelGC:设置年轻代为并行收集器。(此时年老代仍然为串行)
  • -XX:+UseParallelOldGC:配置年老代为并行收集。
  • -XX:ParallelGCThreads=20:配置并行收集器的线程数。
  • -XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间(单位毫秒)。如果无法满足此时间,JVM会自动调整年轻代大小,以满足此时间。
  • -XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动调整年轻代Eden区大小和Survivor区大小的比例,以达成目标系统规定的最低响应时间或者收集频率等指标。此参数建议在使用并行收集器时,一直打开。
  并发收集器(响应时间优先)
  • -XX:+UseConcMarkSweepGC:即CMS收集,设置年老代为并发收集。
  • -XX:+UseParNewGC:设置年轻代为并发收集。JDK5.0以上JVM会自行设置,无需再设。
  • -XX:CMSFullGCsBeforeCompaction=0:每次Full GC后立刻开始压缩和整理内存。
  • -XX:+UseCMSCompactAtFullCollection:打开内存空间的压缩和整理,在Full GC后执行。
  • -XX:+CMSIncrementalMode:设置为增量收集模式。一般适用于单CPU情况。
  • -XX:CMSInitiatingOccupancyFraction=70:表示年老代内存空间使用到70%时就开始执行CMS收集,以确保年老代有足够的空间接纳来自年轻代的对象,避免Full GC的发生。
  其它垃圾回收参数
  • -XX:+ScavengeBeforeFullGC:年轻代GC优于Full GC执行。
  • -XX:-DisableExplicitGC:不响应 System.gc() 代码。
  • -XX:+UseThreadPriorities:启用本地线程优先级API。即使 java.lang.Thread.setPriority() 生效,不启用则无效。
  • -XX:SoftRefLRUPolicyMSPerMB=0:软引用对象在最后一次被访问后能存活0毫秒(JVM默认为1000毫秒)。
  • -XX:TargetSurvivorRatio=90:允许90%的Survivor区被占用(JVM默认为50%)。提高对于Survivor区的使用率。

三、辅助信息参数设置

  • -XX:-CITime:打印消耗在JIT编译的时间。
  • -XX:ErrorFile=./hs_err_pid.log:保存错误日志或数据到指定文件中。
  • -XX:HeapDumpPath=./java_pid.hprof:指定Dump堆内存时的路径。
  • -XX:-HeapDumpOnOutOfMemoryError:当首次遭遇内存溢出时Dump出此时的堆内存。
  • -XX:OnError=";":出现致命ERROR后运行自定义命令。
  • -XX:OnOutOfMemoryError=";":当首次遭遇内存溢出时执行自定义命令。
  • -XX:-PrintClassHistogram:按下 Ctrl+Break 后打印堆内存中类实例的柱状信息,同JDK的 jmap -histo 命令。
  • -XX:-PrintConcurrentLocks:按下 Ctrl+Break 后打印线程栈中并发锁的相关信息,同JDK的 jstack -l 命令。
  • -XX:-PrintCompilation:当一个方法被编译时打印相关信息。
  • -XX:-PrintGC:每次GC时打印相关信息。
  • -XX:-PrintGCDetails:每次GC时打印详细信息。
  • -XX:-PrintGCTimeStamps:打印每次GC的时间戳。
  • -XX:-TraceClassLoading:跟踪类的加载信息。
  • -XX:-TraceClassLoadingPreorder:跟踪被引用到的所有类的加载信息。
  • -XX:-TraceClassResolution:跟踪常量池。
  • -XX:-TraceClassUnloading:跟踪类的卸载信息。

JVM常用启动参数的更多相关文章

  1. JVM常用启动参数+常用内存调试工具

    一.JVM常用启动参数 -Xms:设置堆的最小值. -Xmx:设置堆的最大值. -Xmn:设置新生代的大小. -Xss:设置每个线程的栈大小. -XX:NewSize:设置新生代的初始值. -XX:M ...

  2. JVM 常用启动参数

    JVM 常用启动参数 默认值 -xms -xmx

  3. JVM调优系列:(五)JVM常用调试参数和工具

    转自:http://blog.csdn.net/opensure/article/details/46715769 JVM常用调试参数: –verbose:gc在虚拟机发生内存回收时在输出设备显示信息 ...

  4. JVM监控启动参数

    服务端: JVM监控启动参数 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=52001 -Dcom.sun.ma ...

  5. JVM组成、GC回收机制、算法、JVM常见启动参数、JAVA出现OOM,如何解决、tomcat优化方法

    JVM组成.GC回收机制.算法.JVM常见启动参数.JAVA出现OOM,如何解决.tomcat优化方法

  6. Prometheus监控学习笔记之prometheus 版本1.7 常用启动参数

    日志类: -log.level 可选值 [debug, info, warn, error, fatal]  例:-log.level "info" -log.format  可选 ...

  7. MongoDB 常用启动参数

    每日一句 Once you choose your way of life, be brave to stick it out and never return. 生活的道路一旦选定,就要勇敢地走到底 ...

  8. [jvm] -- 常用内存参数配置篇

    新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可 ...

  9. JVM堆内存相关的启动参数:年轻代、老年代和永久代的内存分配

    如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JD ...

随机推荐

  1. Java并发编程之synchronized

    在Java编程中,为了保证线程安全,有3种不同的思路1.互斥同步:包括synchronized和lock等. 2.非阻塞同步:如AtomicInteger的increaseAndGet()方法等. 3 ...

  2. 页面实现多个定时器(计时器)时选用NSTimer还是GCD?(干货不湿)

    定时器在我们每个人做的iOS项目里面必不可少,如登录页面倒计时.支付期限倒计时等等,一般来说使用NSTimer创建定时器: + (NSTimer *)timerWithTimeInterval:(NS ...

  3. JavaScript事件(二)

    例题顺序: 1.子菜单下拉2.图片轮播3.选项卡效果4.进度条制作5.滑动效果6.滚动固定效果 1.子菜单下拉 <!DOCTYPE html PUBLIC "-//W3C//DTD X ...

  4. .net 4.0 中的特性总结(二):默认参数、命名参数

    1.在方法定义的时候为参数指定一个默认值.调用方法的时候既可以像平时那样传入参数,也可以直接跳过不传入,这样的话,就使用默认值传到方法里.例如: 2.在之前版本的C#中,方法定义的参数顺序必须与方法调 ...

  5. MongoDB--初始

    指定启动目录,以服务形式启动 Mongod --dbpath=XXXXXX --logpath=XXXXXXXX --logappend --serviceName "XXXXX" ...

  6. 【转载】Static 关键字的作用

    原始日期:2016-07-16 17:53   一   普通的static关键字 1.  静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变 ...

  7. Vue 项目实战系列 (三)

    我们继续前两节的开发.本节教程实现的效果如下: 效果很简单,但是实现起来却要用到Vue的很多知识,下面我们将一步一步的实现这个效果. 首先这些城市的信息都是从后台的server里面获取的,所以我们需要 ...

  8. SCI论文写作中的注意事项

    SCI论文一般都是英文的格式,其中有很多原则和细节需要我们注意,在我完成第一篇SCI论文的过程中,做些记录,同时和大家分享一下这些经验.同时也稍微改变一下园子里的人口比例,都是攻城狮,程序猿什么的也过 ...

  9. promise(3) '静态'方法

    要是人没有梦想,跟咸鱼又有什么两样了?一直恐惧读源码,哪怕是一个简单的库也是读百来行遇到难点就放弃了.对于新的东西也仅仅是知道它拿来干什么,社区资源在哪里,要用时就突击文档资源使用即可.未有过深入之心 ...

  10. 【CC2530入门教程-06】CC2530的ADC工作原理与应用

    第6课  CC2530的ADC工作原理与应用 广东职业技术学院  欧浩源 一.A/D转换的基本工作原理 将时间上连续变化的模拟量转化为脉冲有无的数字量,这一过程就叫做数字化,实现数字化的关键设备是AD ...