【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【Java 虚拟机原理】垃圾回收算法 ( 设置 JVM 命令参数输出 GC 日志 | GC 日志输出示例 | GC 日志分析 )

文章目录

一、设置 JVM 命令参数输出 GC 日志

二、GC 日志示例

三、GC 日志分析





一、设置 JVM 命令参数输出 GC 日志


在 IntelliJ IDEA 的启动参数中设置


-XX:+PrintGCDetails


Java 虚拟机参数 , 当运行 Java 程序时 , 会在控制台打印 GC 回收相关信息 ;


其它的 Java 虚拟机常用命令参数参考 : https://blog.csdn.net/yangwei234/article/details/82977716



选择 IntelliJ IDEA 中 , 运行程序 下拉菜单 中的 " Edit Configurations… " 选项 ;

image.png



在 VM options 输入框中 , 输入 -XX:+PrintGCDetails 选项 , 这是给 Java 虚拟机设置的参数 ;


image.png






二、GC 日志示例


运行如下代码 :


public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main = null;
        System.gc();
    }
}


命令行输出的 GC 日志 :


[GC (System.gc()) [PSYoungGen: 7895K->744K(153088K)] 7895K->752K(502784K), 0.0125267 secs] [Times: user=0.00 sys=0.00, real=0.03 secs] 
[Full GC (System.gc()) [PSYoungGen: 744K->0K(153088K)] [ParOldGen: 8K->593K(349696K)] 752K->593K(502784K), [Metaspace: 3012K->3012K(1056768K)], 0.0039947 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
Heap
 PSYoungGen      total 153088K, used 3947K [0x0000000715b80000, 0x0000000720600000, 0x00000007c0000000)
  eden space 131584K, 3% used [0x0000000715b80000,0x0000000715f5af98,0x000000071dc00000)
  from space 21504K, 0% used [0x000000071dc00000,0x000000071dc00000,0x000000071f100000)
  to   space 21504K, 0% used [0x000000071f100000,0x000000071f100000,0x0000000720600000)
 ParOldGen       total 349696K, used 593K [0x00000005c1200000, 0x00000005d6780000, 0x0000000715b80000)
  object space 349696K, 0% used [0x00000005c1200000,0x00000005c1294520,0x00000005d6780000)
 Metaspace       used 3042K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 330K, capacity 388K, committed 512K, reserved 1048576K



image.png





三、GC 日志分析


[GC (System.gc()) [PSYoungGen: 7895K->744K(153088K)] 7895K->752K(502784K), 0.0125267 secs] [Times: user=0.00 sys=0.00, real=0.03 secs]


GC (System.gc()) :


GC (System.gc()) 表示是开发者手动调用了 System.gc() 方法 ;



[PSYoungGen: 7895K->744K(153088K)] :


PSYoungGen , 其中 PS 是 Parallel Seavenge 垃圾回收器 , YoungGen 是年轻代 ;


7895K->744K 表示垃圾回收 , 从占用 7895K 内存 , 变为占用 744K 内存 ;


153088K 表示年轻代 内存大小 ;



[Times: user=0.00 sys=0.00, real=0.03 secs] :


Times 表示本次垃圾回收基本耗时 ;



[Full GC (System.gc()) [PSYoungGen: 744K->0K(153088K)] [ParOldGen: 8K->593K(349696K)] 752K->593K(502784K), [Metaspace: 3012K->3012K(1056768K)], 0.0039947 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]


[ParOldGen: 8K->593K(349696K)] :


Par 表示 Parallel 垃圾回收器 , OldGen 表示老年代 ;



[Times: user=0.00 sys=0.00, real=0.00 secs] :


Times 表示本次垃圾回收基本耗时 ;



PSYoungGen      total 153088K, used 3947K [0x0000000715b80000, 0x0000000720600000, 0x00000007c0000000)
  eden space 131584K, 3% used [0x0000000715b80000,0x0000000715f5af98,0x000000071dc00000)
  from space 21504K, 0% used [0x000000071dc00000,0x000000071dc00000,0x000000071f100000)
  to   space 21504K, 0% used [0x000000071f100000,0x000000071f100000,0x0000000720600000)


第 1 11 行 PSYoungGen total 153088K, used 3947K [0x0000000715b80000, 0x0000000720600000, 0x00000007c0000000) 表示年轻代内存空间总大小 , 使用了多少 ;


第 2 22 行 eden space 131584K, 3% used [0x0000000715b80000,0x0000000715f5af98,0x000000071dc00000) 表示 Eden 区大小 , 以及使用情况 ;


第 3 33 行 from space 21504K, 0% used [0x000000071dc00000,0x000000071dc00000,0x000000071f100000) 表示 From 区大小 , 以及使用情况 ;


第 4 44 行 to space 21504K, 0% used [0x000000071f100000,0x000000071f100000,0x0000000720600000) 表示 To 区大小 , 以及使用情况 ;



ParOldGen       total 349696K, used 593K [0x00000005c1200000, 0x00000005d6780000, 0x0000000715b80000)
  object space 349696K, 0% used [0x00000005c1200000,0x00000005c1294520,0x00000005d6780000)


老年代区域的内存大小 , 及使用情况 ;


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
监控 算法 Java
Java虚拟机(JVM)垃圾回收机制深度剖析与优化策略####
本文作为一篇技术性文章,深入探讨了Java虚拟机(JVM)中垃圾回收的工作原理,详细分析了标记-清除、复制算法、标记-压缩及分代收集等主流垃圾回收算法的特点和适用场景。通过实际案例,展示了不同GC(Garbage Collector)算法在应用中的表现差异,并针对大型应用提出了一系列优化策略,包括选择合适的GC算法、调整堆内存大小、并行与并发GC调优等,旨在帮助开发者更好地理解和优化Java应用的性能。 ####
111 0
|
1月前
|
虚拟化 网络虚拟化 Windows
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。
|
1月前
|
SQL 数据库
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
|
4月前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
159 31
|
4月前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。
462 15
|
4月前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。
|
4月前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
5月前
|
机器学习/深度学习 监控 算法
Java虚拟机(JVM)的垃圾回收机制深度剖析####
本文深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法、性能调优策略及未来趋势。通过实例解析,为开发者提供优化Java应用性能的思路与方法。 ####
108 1
|
4月前
|
存储 监控 算法
Java内存管理的艺术:深入理解垃圾回收机制####
本文将引领读者探索Java虚拟机(JVM)中垃圾回收的奥秘,解析其背后的算法原理,通过实例揭示调优策略,旨在提升Java开发者对内存管理能力的认知,优化应用程序性能。 ####
91 0
|
4月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
131 9

热门文章

最新文章

下一篇
oss创建bucket