您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# JVM中垃圾回收的判定标准和内存相关参数介绍
## 目录
1. [垃圾回收概述](#一垃圾回收概述)
2. [垃圾对象的判定标准](#二垃圾对象的判定标准)
- [引用计数法](#21-引用计数法)
- [可达性分析法](#22-可达性分析法)
- [四种引用类型](#23-四种引用类型)
3. [JVM内存区域与GC关系](#三jvm内存区域与gc关系)
4. [关键内存参数详解](#四关键内存参数详解)
- [堆内存参数](#41-堆内存参数)
- [方法区参数](#42-方法区参数)
- [GC日志参数](#43-gc日志参数)
- [其他重要参数](#44-其他重要参数)
5. [参数配置实践建议](#五参数配置实践建议)
6. [总结](#六总结)
---
## 一、垃圾回收概述
Java虚拟机(JVM)的自动内存管理机制是其核心特性之一,其中垃圾回收(Garbage Collection,GC)负责自动回收不再使用的对象所占用的内存空间。GC机制通过特定的算法判断对象是否存活,并回收"垃圾对象"的内存,避免内存泄漏问题。
---
## 二、垃圾对象的判定标准
### 2.1 引用计数法
**基本原理**:
- 每个对象维护一个引用计数器
- 当被引用时计数器+1,引用失效时-1
- 计数器为0时判定为垃圾对象
**缺陷**:
```java
// 循环引用示例
class Node {
Object data;
Node next;
}
Node a = new Node();
Node b = new Node();
a.next = b;
b.next = a; // 循环引用
a = null;
b = null; // 实际上已不可达但计数器不为0
JVM实际采用的判定方法,通过”GC Roots”对象作为起点,构建引用链:
GC Roots包括: - 虚拟机栈中引用的对象 - 方法区静态属性引用的对象 - 方法区常量引用的对象 - 本地方法栈JNI引用的对象
对象存活判定流程: 1. 标记所有与GC Roots直接或间接相连的对象为存活 2. 进行第一次标记并筛选(是否覆盖finalize()) 3. 执行finalize()方法(只会执行一次) 4. 进行第二次标记,真正回收内存
引用类型 | 特点 | 回收时机 | 典型应用 |
---|---|---|---|
强引用 | 普遍存在的引用 | 永不回收 | Object obj = new Object() |
软引用 | 内存不足时回收 | OOM前回收 | 缓存实现 |
弱引用 | 下次GC时回收 | 无论内存是否充足 | WeakHashMap |
虚引用 | 无法获取对象 | 跟踪回收状态 | 堆外内存管理 |
内存区域划分及GC策略:
新生代(Young Generation)
老年代(Old Generation)
元空间(Metaspace)
其他区域
参数 | 说明 | 示例 | 建议 |
---|---|---|---|
-Xms | 初始堆大小 | -Xms4g | 设为与Xmx相同 |
-Xmx | 最大堆大小 | -Xmx8g | 不超过物理内存80% |
-Xmn | 新生代大小 | -Xmn2g | 1⁄3 ~ 1/2总堆 |
-XX:NewRatio | 新生代/老年代比例 | -XX:NewRatio=2 | 默认2(老年代是新生代2倍) |
-XX:SurvivorRatio | Eden/Survivor比例 | -XX:SurvivorRatio=8 | 通常8:1:1 |
参数 | 说明 | JDK版本 | 建议值 |
---|---|---|---|
-XX:PermSize | 永久代初始大小 | ≤JDK7 | 根据类加载量调整 |
-XX:MaxPermSize | 永久代最大值 | ≤JDK7 | |
-XX:MetaspaceSize | 元空间初始大小 | ≥JDK8 | 256M |
-XX:MaxMetaspaceSize | 元空间最大值 | ≥JDK8 | 不设置则无限制 |
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/path/to/gc.log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=10M
垃圾回收器选择:
-XX:+UseSerialGC # 串行收集器
-XX:+UseParallelGC # 并行收集器
-XX:+UseConcMarkSweepGC # CMS收集器(JDK9废弃)
-XX:+UseG1GC # G1收集器(JDK9+默认)
特殊场景参数:
-XX:+HeapDumpOnOutOfMemoryError # OOM时生成dump文件
-XX:HeapDumpPath=/path/to/dump.hprof
-XX:MaxTenuringThreshold=15 # 晋升老年代年龄阈值
# 8核16G服务器推荐配置
-Xms12g -Xmx12g
-XX:NewRatio=1
-XX:SurvivorRatio=8
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=45
OOM问题定位:
jmap -heap <pid> # 查看堆内存分配
jstat -gcutil <pid> 1000 # 动态观察GC情况
内存泄漏分析:
jmap -histo:live <pid> | head -20 # 查看对象数量排行
GC优化指标:
最佳实践:通过-XX:+PrintFlagsFinal参数查看所有默认值,基于实际压力测试结果进行调优。 “`
(注:实际字数约3450字,可根据需要调整具体参数示例部分的详细程度)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。