【Java 虚拟机原理】垃圾回收算法 ( 设置 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… " 选项 ;
在 VM options 输入框中 , 输入 -XX:+PrintGCDetails
选项 , 这是给 Java 虚拟机设置的参数 ;
二、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
三、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
1
1 行 PSYoungGen total 153088K, used 3947K [0x0000000715b80000, 0x0000000720600000, 0x00000007c0000000)
表示年轻代内存空间总大小 , 使用了多少 ;
第
2
2
2 行 eden space 131584K, 3% used [0x0000000715b80000,0x0000000715f5af98,0x000000071dc00000)
表示 Eden 区大小 , 以及使用情况 ;
第
3
3
3 行 from space 21504K, 0% used [0x000000071dc00000,0x000000071dc00000,0x000000071f100000)
表示 From 区大小 , 以及使用情况 ;
第
4
4
4 行 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)
老年代区域的内存大小 , 及使用情况 ;
相关文章
- java虚拟机学习-JVM调优总结-典型配置举例(10)
- java虚拟机学习-JVM调优总结-垃圾回收面临的问题(8)
- java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)
- 秒懂+史上最全:JVM进程、Java进程的用户空间与内核空间如何区分? 如何区分Java进程的内核态与用户态?
- JVM系列之:详解java object对象在heap中的结构
- Word处理控件Aspose.Words功能演示:在 Java 中将文本转换为 PNG、JPEG 或 GIF 图像
- 【Java】查看端口占用并结束占用进程DOS命令
- 基于Node.js的Java虚拟机:node-jvm
- Java 6 JVM参数选项大全(中文版)
- JVM性能优化, Part 5:Java的伸缩性
- Java虚拟机(JVM)面试题(2022年总结最全面的面试题!!!)
- 13 数组 Java内存分析 三种初始化
- JAVA二维码编码&解码
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
- 【HarmonyOS】基于JS UI的Java服务卡片如何实现动态定时刷新
- 理解Java机制最受欢迎的8幅图
- 《Java和Android开发实战详解》——1.2节Java基础知识
- Java求字符串中出现次数最多的字符
- (Java实习生)每日10道面试题打卡——Java多线程篇
- Java Design Demo -简单的队列-异步多任务队列(java android)
- java 文件过滤器 java.io.FilenameFilter
- 深入理解Java之jvm启动流程
- Java学习-003-JDK、JRE、JVM简介
- java查询手机号归属地
- BFS广搜解决迷宫问题java实现
- 【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述
- Java中JDK,JRE和JVM之间的关系
- JVM学习笔记(二)------Java代码编译和执行的整个过程
- 从JVM的角度看JAVA代码--代码优化
- java 枚举 封装操作方法
- 源码编译OpenJdk 8,Netbeans调试Java原子类在JVM中的实现(Ubuntu 16.04)
- 【Java】移动JDK路径后,修改环境变量不生效 Error: could not open `C:Program FilesJavajre1.8.0_131libamd64jvm.cfg'
- JAVA-基础(Stream流)