整体考虑堆大小

-Xms3550m, 初始化堆大小。通常情况和-Xmx大小设置一样,避免虚拟机频繁自动计算后调整堆大小。 
-Xmx3550m,最大堆大小。

考虑分代设置堆大小

首先通过jstat等工具查看应用程序正常情况下需要堆大小,再根据实际情况设置。

新生代

-xmn2g,新生代大小。Sun官方推荐配置为整个堆的3/8。 
-XX:SurvivorRatio=8。Eden和Survivor的比值。

老年代

老年代=整个堆大小-新生代-永久代

永久代

-XX:Permsize=512m,设置永久代初始值。 
-XX:MaxPermsize=512m,设置永久代的最大值。 
注:Java8没有永久代说法,它们被称为元空间,-XX:MetaspaceSize=N

考虑本机直接内存

-XX:MaxDirectMemorySize=100M。默认与Java堆大最大值(-Xmx)

考虑虚拟机栈

每个线程池的堆栈大小。在jdk5以上的版本,每个线程堆栈大小为1m,jdk5以前的版本是每个线程池大小为256k。一般设置256k。 
-Xss256K.

考虑选择垃圾收集器

Serial收集器(串行收集器)

历史最悠久的串行收集器。参数-XX:UseSerialGC。不太常用。

ParNew和ParOld收集器(并发收集器)

Serial的多线程版本收集器。

Parallel Scavenge(吞吐量优先垃圾收集器)

并行收集器,不同于多线程收集器ParNew,关注吞吐量的收集器。 
-XX:MaxGCPauseMillis=10,设置垃圾收集停顿的最大毫秒数。 
-XX:GCTimeRatio=49,垃圾收集器占比,默认是99。 
-XX:+UseAdaptiveSeizPolicy,GC自适应调节策略。 
-XX:+UseParallelGC,虚拟机Server模式默认值,使用Parallel Scavenge + Serial Old进行内存回收。 
-XX:+UseParallelOldGC, 使用Parallel Scavenge + Parallel Old 进行内存回收。

CMS

CMS作为老年代收集器,不能与Parallel Scavenge并存。可能会有内存碎片问题。 
-XX:+UserConcMarkSweepGC,新生代默认用ParNew收集。也可以用-XX:+UserParNewGC强制指定新生代用ParNew收集 
-XX:ParallelGCThreads=4,设置垃圾收集线程数。默认是(CPU数量+3)/4。垃圾收集线程数不少于25%,当CPU数量小于4的时候影响大。 
-XX:CMSInitiatingOccupancyFraction=80,老年代垃圾占比达到这个阈值开始CMS收集,1.6默认是92。设置过高容易导致并发收集失败,会出现SerialOld收集的情况。 
-XX:+UseCMSCompactAtFullCollection,在FULL GC的时候, 对年老代的压缩增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片。 
-XX:CMSFullGCsBeforeCompaction=1,多少次后进行内存压缩。 
-XX:+CMSParallelRemarkEnabled, 为了减少第二次暂停的时间,开启并行remark,降低标记停顿

G1(Garbage First)

-XX:+UseG1GC,谨慎使用,需要经过线上测试,还没有被设置为默认垃圾收集器。 
之前的垃圾收集器收集的范围是新生代或者老年代,而G1垃圾收集器收集的范围包括新生代和老年代整个堆。G1将Java堆划为多个大小相同的独立区域(Region),垃圾收集单位是Region。G1垃圾收集适合至少大于4G内存得系统。并且不会产生内存空间碎片。

其他参数

-XX:MaxTenuringThreshold=30,晋升老年代的年龄。 
-XX:PretenureSizeThreshold=?,晋升老年代的对象大小。没设置过。

考虑日志打印

-verbose:gc,打印GC日志 
-XX:+PrintGC,打印GC基本日志 
-XX:+PrintGCDetails,打印GC详细日志 
-XX:+PrintGCTimeStamps,打印相对时间戳 
-XX:+PrintGCApplicationStoppedTime,打印垃圾回收期间程序暂停的时间 
-XX:+PrintGCApplicationConcurrentTime,打印每次垃圾回收前,程序未中断的执行时间 
-XX:+PrintTenuringDistribution:查看每次minor GC后新的存活周期的阈值 
-XX:+PrintTLAB,查看TLAB空间的使用情况 
-Xloggc:filename,把相关日志信息记录到文件以便分析

考虑OOM(堆溢出)时保留现场日志

当抛出OOM时进行heapdump

-XX:+HeapDumpOnOutOfMemoryError,JVM异常自动生成堆转储 
-XX:HeapDumpPath=,堆转储文件名

转自:http://blog.csdn.net/csujiangyu/article/details/52071473

【JVM】6、聊聊JVM常用参数设置的更多相关文章

  1. jvm常用参数设置 good

    1.堆的大小可以通过 -Xms 和 -Xmx 来设置,一般将他们设置为相同的大小,目的是避免在每次垃圾回收后重新调整堆的大小,比如 -Xms=2g -Xmx=2g 或者 -Xms=512m -Xmx= ...

  2. jvm常用参数设置 专题

    在jdk8中 -Xms2g不合法,能通过的:-Xms2G #!/bin/bash JAVA_OPTS="-Xms4G -Xmx4G -XX:+HeapDumpOnOutOfMemoryErr ...

  3. JVM常用参数设置

    堆内存设置 示例: java -Xmx4550m -Xms4550m -Xss128k -XX:NewRatio=5 -XX:SurvivorRatio=5 -Xmx4550m:设置JVM最大可用内存 ...

  4. JVM笔记-GC常用参数设置

    GC常用参数 -Xmn -Xms -Xmx -Xss 年轻代 最小堆 最大堆 栈空间, -Xms -Xmx 一般设置成一样大小, -XX:+UseTLAB 使用TLAB,默认打开 -XX:+Print ...

  5. java jvm内存管理/gc策略/参数设置

    1. JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想 ...

  6. ubuntu 常用参数设置

        在Linux下,对于参数的设置,一般来说,都遵循这个规律.每一个功能程序,一定对于一个对于名字的配置文件.     涉及到多用户的功能配置,一定有一个全局的配置文件,对所有用户都生效,而每个用 ...

  7. Fusioncharts图表常用参数设置

    1.1 <chart>参数设置: 图表和轴的标题* caption=”String” : 图表上方的标题* subCaption=”String” : 图表上方的副标题* xAxisNam ...

  8. HotSpot JVM常用参数设置

    转自:https://www.zybuluo.com/jewes/note/57352 选项的分类 Hotspot JVM提供以下三大类选项: 1. 标准选项:这类选项的功能是很稳定的,在后续版本中也 ...

  9. JVM内存模型和关键参数设置

    一. JVM内存模型: Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理. 二. Jvm关键参数: 1. 堆大小设置参数: -Xm ...

随机推荐

  1. Cannot set property 'onclick' of null报错

    经常几个页面使用公共js文件, 原来遇到也没留意, 原来是本页面执行的时候, 其他页面也在执行并赋予id于onclick. 因为页面是正常情况下是不存在null和undefined if(null){ ...

  2. [f]计时器

    // 计时器 function Timer(ele) { this._mStr = ''; this._sStr = ''; this._m = 0; this._s = 0; this._setTi ...

  3. XamlWriter-将对象树写入Xaml

    WPF通常用Xaml格式创建对象树.您还可以使用XamlWriter类进行反方向操作——将对象树写入Xaml. 对于XamlWriter来说,将对象转换成良好的Xaml表示形式通常很容易.但是,您不能 ...

  4. EF6学习笔记(六续) 复杂数据模型建表测试

    测试以下几种模型关系: 1对1或0  . 1对多  . 多对多 1 对 1 或 0 如果直接定义两个模型,相互直接增加导航属性,会提示错误,必须为这个对应关系设定主副关系: public class ...

  5. XE下显示托盘图标(TrayIcon)

    https://www.cnblogs.com/studypanp/p/4930619.html XE下显示托盘图标(TrayIcon)   1.拖一个TrayIcon控件 2.拖一个Applicat ...

  6. Word中带圈数字

    写论文时常常要求输入带圈数字,先在Word中输入代码,选中代码后按Alt+X(然后再粘贴到Excel中) 符号 代码⓪ 24ea① 2460② 2461③ 2462④ 2463⑤ 2464⑥ 2465 ...

  7. Runtime之实例总结

    通过前面几篇对Runtime的讲解,本篇汇总一下Runtime实际中常用的一些场景. 1.获取类的基本信息 获取类名: const char *className = class_getName(cl ...

  8. Android数据存储之SQLite使用

    SQLite是D.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行. 在Android中创建的SQLite数据库存储在:/d ...

  9. Qt之实现360安全卫士主界面代码开源

    匆匆一年又过去了,总结去年一年的节奏就是忙爆了:生活忙.工作忙,值得庆幸的是没有瞎忙:今天打开博客园查看我的博客,才发现几乎差不多一年时间没写博客了:博客文章就是记忆,就是曾经努力过的见证,感谢博客园 ...

  10. 用O(1)的时间复杂度删除单链表中的某个节点

    给定链表的头指针和一个结点指针,在O(1)时间删除该结点.链表结点的定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 函数的声明如下: ...