本文共 3207 字,大约阅读时间需要 10 分钟。
概述
当永久代和旧生代出发GC时,除CMS外都会发生Full GC
一些术语解释
图1
图2
均使用复制算法,原理一样。
分配对象时,Eden区内存不足时触发
特性
serial (串行),stop-the-world
适用场景
直接分配到old的规则
晋升规则
特性
特性
cpu核数<=8:=cpu核数
cpu核数>8:=(3+cpu核心*5)/8
会根据Mintor GC频率、时间动态的调整Eden\S0\S1大小,可以消除特性(-XX:UseAdaptiveSizePolicy)
适用场景
直接分配到old的规则
晋升规则
特性
适用场景
特性
算法描述图:
适用场景
特性
算法描述图:
适用场景
缺点
标准
吞吐量(throughput)=应用时间/总时间 关注耗时时间
暂停时间(Latency)关注每次GC造成的暂停
组合选择
-XX:+UseSerialGC
-XX:+UseParallerGC或 -XX:+UseParallerOldGC
-XX:+UseConcMarkSweepGC -XX:ParNewGC
自动选择GC方式
-XX:GCTimeRatio=n
-XX:MaxGCPauseMillis=n
降低GC频率,单过大可能增加单次GC时间
对象更有可能成为垃圾
32位操作系统单个进程最大可用内存2G,64无限
New和Old的比例
-Xms=1024MB
-Xmx=1024MB
堆每次调整就会出发Full GC,避免调整可设置-Xms=-Xmx
降低GC的频率
不一定会增大Mintor GC的时间
Mintor GC耗时与要拷贝的对象(存活对象多少成正比)
-XX:NewSzie1024MB 新生代初始化大小
-XX:MaxNewSzie=1024MB 新生代最大大小
-XX:NewReatio=m New和Old比值
-Xmn=1024MB 新生代大小 (一般使用这个固定新生代大小)
旧生代调优
太大 GC时间长 太小 GC频率高
-XX:+PrintGC(JDK8) 查看GC基本信息
-XX:+PrintGCDetail (JDK8) 查看GC详细信息
-XX:+PrintGCTimeStamps (JDK8) 查看GC过程用户线程并发时间
-XX:+PrintGCApplicationStoppedTime (JDK8)查看GC过程用户线程并发时间暂停时间
-Xlogg:c:/../xx.log 输出文件
查看内存使用情况,head dump:jmap+jhat
查看GC情况:jstat
JConsole:Java监视与管理控制台
JConsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视、管理工
具。它管理部分的功能是针对JMX MBean进行管理,由于MBean可以使用代码、中间件服务器
的管理控制台或者所有符合JMX规范的软件进行访问。
VisualVM:多合一故障处理工具
VisualVM(All-in-One Java Troubleshooting Tool)是到目前为止随JDK发布的功能最强大
的运行监视和故障处理程序。VisualVM的还有一个很大的优点:不需要被监视的程序基于特殊
Agent运行,因此它对应用程序的实际性能的影响很小,使得它可以直接应用在生产环境
JMC,Oracle Java Mission Control 是一个用于对 Java 应用程序进行管理、监视、概要分析和
故障排除的工具套件。首次安装时,Java Mission Control 包括 JMX 控制台和 Java 飞行记录器。
从 Mission Control 中可以轻松安装更多插件
Eclipse EMemoryAnalyzer
转载地址:http://rkjdi.baihongyu.com/