linux虚拟机什么时候会触发gc的探究

作者:神秘网友 发布时间:2020-10-31 14:35:14

linux虚拟机什么时候会触发gc的探究

linux虚拟机什么时候会触发gc的探究

linux 虚拟机什么时候会触发gc

    • 如何查看系统什么时候触发了GC?
    • TODO 这个未完待续

当和同事探讨到一个问题

虚拟机是什么时候会触发GC?是不是只有内存不存的情况下,才会发生GC,还是说,不仅仅是在内存不足的情况下,会发生GC,在内存空间充足的情况下,也会发生GC

linux虚拟机什么时候会触发gc的探究
以上的MinorGc,也称之为YGC

新创建的对象,是在堆内存上分配空间的,
对象优先在Eden分配
(1)将新生代内存分为一块较大的Eden空间和两块较小的Survivor空间;
(2)每次使用Eden和其中一块Survivor;
(3)当回收时,将Eden和使用中的Survivor中还存活的对象一次性复制到另外一块Survivor;
(4)而后清理掉Eden和使用过的Survivor空间;
(5)后面就使用Eden和复制到的那一块Survivor空间,重复步骤3;
默认Eden:Survivor=8:1,即每次可以使用90%的空间,只有一块Survivor的空间被浪费;
大多数情况下,对象在新生代Eden区中分配;

当Eden区没有足够空间进行分配时,JVM将发起一次Minor GC(新生代GC);
Minor GC时,如果发现存活的对象无法全部放入Survivor空间,只好通过分配担保机制提前转移到老年代。

我们在linux上进行测试

linux 上查看gc的命令
借鉴这位优秀的博主

jstat -gcutil 6586

linux虚拟机什么时候会触发gc的探究
其中的含义:

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
P:持久代使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

可以看到,
(1)当 Eden 空间快满的情况下,触发了一次 YGC,此时将 Eden和使用中的S1中还存活的对象一次性复制到另外一块S0,而后清理掉 Eden和使用过的 S1 空间
(2)老年代(O)没有变化,但是P增加了,说明发生过一次YGC,导致了一些大的对象直接进入了持久代

从这个角度来说,这个是不是说明了当年轻代(E)空间不足的情况下,触发了一次GC,当空间充足的情况下,不会发生GC,我觉得不是这样的,因为YGC这个统计的就是年轻代发生GC的次数,而不能说明即使空间不满的情况下,没有触发GC

linux虚拟机什么时候会触发gc的探究相关教程

  1. 深入理解Linux文件系统与日志分析

    深入理解Linux文件系统与日志分析 元信息,inode与block概述 文件数据包括元信息与实际数据 文件存储在硬盘上,硬盘最小存储单元是“扇区”,每个扇区存储512字节 元信息 元信息是关于信息的信息,用于描述信息的结构、语义、用途和用法等,比如文件的创建者

  2. linux下用命令运行kettle中的trans并传参数

    linux下用命令运行kettle中的trans并传参数 这个比较简单直接上命令 ./pan.sh -file=/home/impdatahd/kettle/kettle_transition/test01.ktr -logfile = /home/impdatahd/kettle/log/zhengkw.log -trans =test01 -param:create_time= '2020-08-01' -level=basi

  3. Linux环境安装Tomcat1

    Linux环境安装Tomcat1 Linux安装jdk配置环境变量详细步骤 一、登录虚拟机进入终端切换到root用户,输入:su 接着输入密码 再输入:cd … 回到root用户 二、查看Linux系统是否有自带的jdk: 1、输入:java -version 2、发现有输入:rpm -qa | grep java 检测jd

  4. Linux自定义命令和环境变量

    Linux自定义命令和环境变量 Linux自定义命令和环境变量 环境变量 系统自带环境变量 自定义环境变量 自定义命令 查看自定义命令 自定义命令 环境变量 这种环境变量针对所有用户和环境都适用。 变量名称 作用 HOME 用户的家目录(即主目录) SHELL 用户在使用的

  5. CentOS7虚拟机 配置静态ip并可以上网

    CentOS7虚拟机 配置静态ip并可以上网 ** ** ip addr ** ** vi /etc/sysconfig/network-scripts/ifcfg-eth33 ** ** BOOTPROTO=staticIPADDR=192.168.48.128NETMASK=255.255.255.0GATEWAY=192.168.48.2DNS1=192.168.48.2 GATEWAY 和 DNS1 需要一致 ** ** servic

  6. Linux超简单常用命令

    Linux超简单常用命令 Linux简单入门槛 系统分区 常用命令 系统分区 正常只有四个主分区 如果不够用了 可以把第四个分区(扩展分区)分成两个逻辑分区 扩展分区不能格式化和写入数据 逻辑分区可以 其实Linux里面的硬件都是文件 通过格式化存储 根目录是Linux的最

  7. Linux 命令xxd功能

    Linux 命令xxd功能 参考自:《Linux 命令xxd输出十六进制》 《Python实现Linux命令xxd -i功能》 Linux下的xxd命令,能将一个给定文件或标准输入转换为十六进制形式,也能将十六进制转换回二进制形式。 一. Linux命令xxd Usage: xxd [options] [infile [outfil

  8. Linux------系统安全及应用

    Linux------系统安全及应用 目录 一 账户安全基本措施 1.1 账号安全基本措施 1.2 密码安全控制 1.3 命令历史限制 1.4 注销时自动清空命令历史 1.5 终端自动注销 二 使用su命令切换用户 2.1 su 命令——切换用户 2.2 sudo 命令 —— 提升执行权限 三 系统引导