gc记录

谁说胖子不能爱 提交于 2019-12-02 06:29:41

-Xms20M starting
-Xmx max
-Xmn new

对象分配eden
-XX:SurvivorRatio=8
8:1:1

TLAB Thread Local Allaction Buffer

对象很大
-XX:PretenureSizeThreshold=3145728 3M
长期存活的对象
-XX:MaxTenuringThreshold=15
动态对象年龄判定
相同年龄所有对象的大小总和 > Survivor空间的一半

分配担保
Minor GC 之前检查 老年代最大可用连续空间是否>新生代所有对象总空间


Minor GC
Major GC
Full GC

什么样的对象需要回收?
判断算法
引用
强 Object object = new Object();




回收
方法论
标记-清除算法
复制回收算法
标记-整理算法
垃圾收集器
STW Stop The World
Serial
ParNew
-XX:ParallelGCThreads
Parallel Scavenge (全局)
吞吐量 = 运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)
-XX:MaxGCPauseMillis=n
-XX:GCTimeRatio=n
-XX:UseAdaptiveSizePolicy GC Ergonomics
Serial Old
CMS备用预案 Concurrent Mode Failusre时使用
标记-整理算法
Parallel Old
标记-整理算法
CMS
标记-清除算法
减少回收停顿时间
碎片 -XX:CMSInitiatingOccupancyFraction
Concurrent Mode Failure 启用Serial Old

-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction 执行多少次不压缩FullGC后 来一次带压缩的 0 表示每次都压
-XX:+UseConcMarkSweep
G1

回收的时间节点

如何查看当前的垃圾回收器
-XX:+PrintFlagsFinal
-XX:+PrintCommandLineFlags
server client
MBean

GC日志
1.输出日志
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:/home/administrator/james/gc.log
-XX:+PrintHeapAtGC
2.日志文件控制
-XX:-UseGCLogFileRotation
-XX:GCLogFileSize=8K
3.怎么看

JDK自带的 监控工具
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/toc.html
jmap -heap pid 堆使用情况
jstat -gcutil pid 1000
jstack 线程dump
jvisualvm
jconsole

MAT
http://help.eclipse.org/oxygen/index.jsp?topic=/org.eclipse.mat.ui.help/welcome.html
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/home/administrator/james/error.hprof

怀疑:
1.看GC日志 126719K->126719K(126720K)
2.dump
3.MAT
1.占用Retained Heap
2.看有没有GC Root指向


VM参数
http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!