java虚拟机常见的参数笔记
转自:https://www.jianshu.com/p/0fc6fbf08c9d
-verbose:gc //表示输出虚拟机中GC的情况 通常配合PrintGCDetails 使用 -XX:+PrintGCDetails //打印虚拟机中GC的详细情况. -Xloggc:../logs/gc.log //打印GC日志到文件 -XX:+UseSerialGC //设置使用 Serial 收集器 ,一般jvm默认在client模式下回自动使用Serial收集器(内存小于2G) -Xms20M //最小堆内存 -Xmx20M //最大堆内存 -Xmn10M //新生代内存 -XX:SurvivorRatio=8 // egdn/survivir = 8 , 8x+2x = 10m , x=1m , survivir=1m , egdn=8m -XX:PretenureSizeThreshold=2m //大对象直接即进入老年代,这里是2m (Paralle Scavenge收集器不认识PretenureSizeThreshold参数) -XX:MaxTenuringThreshold=6 // 设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代 。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间 ,增加在年轻代即被回收的概论。 -XX:+HandlePromotionFailure //是否允许担保分配内存失败,即整个年老代空间不足,而整个新生代中Eden和Survivor对象都存活的极端情况。 -XX:NewSize=n //设置年轻代大小 -XX:PermSize=64M //JVM初始分配的非堆内存 -XX:MaxPermSize=128M //JVM最大允许分配的非堆内存,按需分配 ParallelGCThreads //设置 Parallel 收集器 并行GC时进行内存回收的线程数。 收集器设置 -XX:+UseSerialGC //设置串行收集器 -XX:+UseParallelGC //设置并行收集器 -XX:+UseParalledlOldGC //设置并行年老代收集器 -XX:+UseConcMarkSweepGC //使用CMS内存收集 并行收集器设置 -XX:ParallelGCThreads=n //设置并行收集器收集时使用的CPU数。并行收集线程数。 -XX:MaxGCPauseMillis=n //设置并行收集最大暂停时间 -XX:GCTimeRatio=n //设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n) 并发收集器设置 -XX:+CMSIncrementalMode //设置为增量模式。适用于单CPU情况。 -XX:ParallelGCThreads=n //设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。 -XX:+DisableExplicitGC //关闭显示调用GC -server //设置服务端模式 -Xss256k //一个线程的堆栈大小 ,JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内 存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 -XX:+UseAdaptiveSizePolicy // 自动选择年轻代区大小和相应的Survivor区比例,设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开. XX:+CMSParallelRemarkEnabled //为了减少第二次暂停的时间,开启并行remark: -XX:+CMSParallelRemarkEnabled。如果remark还是过长的话,可以开启-XX:+CMSScavengeBeforeRemark选项,强制remark之前开始一次minor gc,减少remark的暂停时间,但是在remark之后也将立即开始又一次minor gc。 -XX:+UseCMSCompactAtFullCollection //在FULL GC的时候, 对年老代的压缩 , CMS是不会移动内存的, 因此, 这个非常容易产生碎片, 导致内存不够用, 因此, 内存的压缩这个时候就会被启用。 增加这个参数是个好习惯。可能会影响性能,但是可以消除碎片 XX+UseCMSInitiatingOccupancyOnly //我们用-XX+UseCMSInitiatingOccupancyOnly标志来命令JVM不基于运行时收集的数据来启动CMS垃圾收集周期。而是,当该标志被开启时,JVM通过CMSInitiatingOccupancyFraction的值进行每一次CMS收集,而不仅仅是第一次。然而,请记住大多数情况下,JVM比我们自己能作出更好的垃圾收集决策。因此,只有当我们充足的理由(比如测试)并且对应用程序产生的对象的生命周期有深刻的认知时,才应该使用该标志。 -XX:+HeapDumpOnOutOfMemoryError // OutOfMemoryError dump 内存 -XX:+UseFastAccessorMethods //原始类型的快速优化 -XX:+UseCMSInitiatingOccupancyOnly //使用手动定义初始化定义开始CMS收集 禁止hostspot自行触发CMS GC 在使用G1垃圾回收器的时候,通过 JVM参数 -XX:+UseStringDeduplication 。 我们可以通过删除重复的字符串,只保留一个char[]来优化堆内存。这个选择在Java 8 u 20被引入。
参考 : https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
http://blog.csdn.net/gmemai/article/details/48786763
http://www.blogjava.net/killme2008/archive/2009/09/22/295931.html
http://www.importnew.com/14086.html
http://blog.csdn.net/gmemai/article/details/48786763
https://www.cnblogs.com/ityouknow/p/5614961.html
http://blog.csdn.net/gmemai/article/details/48786763
http://www.blogjava.net/killme2008/archive/2009/09/22/295931.html
http://www.importnew.com/14086.html
http://blog.csdn.net/gmemai/article/details/48786763
https://www.cnblogs.com/ityouknow/p/5614961.html
java获取内存dump的几种方式
java获取内存dump的几种方式:
1.获取内存详情:jmap -dump:format=b,file=e.bin pid号
这种方式可以用jvisualvm.exe进行内存分析,或者采用Eclipse Memory Analysis Tools(MAT)这个工具
2.获取内存dump:jmap -histo:live pid号
这个方式会先fullgc,如果不希望触发fullgc可以使用jmap -histo pid号
3.第三种方式:jdk启动加参数
-XX:+HeapDumpBeforeFullGC
-XX:HeapDumpPath=/httx/logs/dump
这种方式会产生dump日志,在通过jvisualvm.exe或者Eclipse Memory Analysis Tools工具进行分析。