Skip to main content

Garbage Collection

Optimization

GC 优化的核心思路: 尽可能让对象在新生代中分配和回收, 尽量避免过多对象进入老年代, 导致对老年代频繁进行垃圾回收, 同时给系统足够的内存减少新生代垃圾回收次数.

分析系统的运行状况:

  • 系统每秒请求数, 每个请求创建多少对象, 占用多少内存
  • Young GC 触发频率, 对象进入老年代的速率
  • 老年代占用内存, Full GC 触发频率, Full GC 触发的原因, 长时间 Full GC 的原因

Library

  • 监控告警系统: Zabbix、Prometheus、Open-Falcon
  • jdk 自动实时内存监控工具: VisualVM
  • 堆外内存监控: Java VisualVM 安装 Buffer Pools 插件, google perf 工具, Java NMT (Native Memory Tracking) 工具
  • GC 日志分析: GCViewer、gceasy
# jstat: JVM 自带命令行工具, 可用于统计内存分配速率、GC 次数, GC 耗时
jstat -gc <pid> <统计间隔时间> <统计次数>

# jmap: JVM 自带命令行工具, 可用于了解系统运行时的对象分布
jmap -histo <pid>
jmap -dump:live,format=b,file=dump.prof <pid>

# 用来查看正在运行的 Java 应用程序的扩展参数
# 包括 Java System 属性和 JVM 命令行参数
jinfo <pid>