属性

GC.MaxGeneration:获取系统当前支持的最大代数。

方法

GC.GetTotalMemory(bool forceFullCollection) 方法
  true表示该方法先做垃圾收集操作,之后才计算出受控代码分配的字节数。false表示不做垃圾收集,直接计算出受控代码分配的字节数。

GC.Collect

垃圾回收是基于历史经验了,当发生非重复性事件的时候,垃圾自动回收就变的不准确,这时候可用采用手动调用GC.Collect方法清除垃圾。例如在用户保存一个数据之后强制执行一次GC.Collect方法。

GC.Collect();  //强制对所有代进行即时垃圾回收。
Collect(Int32) 强制对 0 代到指定代进行即时垃圾回收。
Collect(Int32, GCCollectionMode) 强制在 GCCollectionMode 值所指定的时间对 0 代到指定代进行垃圾回收。
Collect(Int32, GCCollectionMode, Boolean) 在由 GCCollectionMode 值指定的时间,强制对 0 代到指定代进行垃圾回收,另有数值指定回收是否应该为阻碍性。
Collect(Int32, GCCollectionMode, Boolean, Boolean) 在由 GCCollectionMode 值指定的时间,强制对 0 代到指定代进行垃圾回收,另有数值指定回收应该为阻碍性还是压缩性。

GCCollectionMode:指定垃圾收集是强制的(DefaultForced指回收0~指定的代)还是optimized优化(指能释放大内存和减少碎片化才执行优化)。

using System.Runtime;
//查看GC的类型,以及工作方式。该类在using System.Runtime;命名空间 在.json或xml文件中修改
Console.WriteLine($"IsServerGC:{GCSettings.IsServerGC}");// 释放是服务器GC
Console.WriteLine($"IsServerGC:{GCSettings.LatencyMode}");// 工作方式 FGClass fG = new FGClass();
fG.MakeGarbage();
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// 获取当前垃圾对象所在的代 //检索当前认为要分配的字节数。参数指示此方法是否可以在返回之前等待一个短时间间隔,以允许系统收集垃圾和结束对象。
Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");//
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// GC.Collect(0);//回收第0代
Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");//
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// GC.Collect(2);//回收0~2代
Console.WriteLine($"GetTotalMemory:{GC.GetTotalMemory(false) / 1024}MB");//
Console.WriteLine($"GetGeneration:{GC.GetGeneration(fG)}");// Console.Read();
public class FGClass
{
Version vt;
public void MakeGarbage()
{ for (int i = 0; i < 100; i++)
{
vt = new Version(); } } }

GC.CollectionCount()返回自启动进程以来已经对指定代进行的垃圾回收次数。

以下这些方法是大对象回收时候用到:

CancelFullGCNotification
RegisterForFullGCNotification
WaitForFullGCApproach
WaitForFullGCComplete

AddMemoryPressure和RemoveMemoryPressure

这两个方法主要用于本地资源,比如一个位图占用了50M本地内存,但是托管对象只包含一个HBitMap(4字节或8字节)。但CRL并不知道这个内存压力,它可能允许你分配数百个位图,因为它们占用的托管内存太少了。这两个方法的目的就是要告诉GC它实际的本地资源用了多少内存量,GC知道这个信息后会调整它的垃圾回收策略,当压力变大时,他就强制执行垃圾回收。

【C# .Net GC】强制垃圾回收 和System GC的更多相关文章

  1. JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 2.什么时候 ...

  2. java: system.gc()和垃圾回收机制finalize

    System.gc()和垃圾回收机制前的收尾方法:finalize(收尾机制) 程序退出时,为每个对象调用一次finalize方法,垃圾回收前的收尾方法 System.gc() 垃圾回收方法 clas ...

  3. System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接

    System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接

  4. 【转载】Java性能优化之JVM GC(垃圾回收机制)

    文章来源:https://zhuanlan.zhihu.com/p/25539690 Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我 ...

  5. Java性能优化之JVM GC(垃圾回收机制)

    Java的性能优化,整理出一篇文章,供以后温故知新. JVM GC(垃圾回收机制) 在学习Java GC 之前,我们需要记住一个单词:stop-the-world .它会在任何一种GC算法中发生.st ...

  6. 浅析JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 注意:垃圾回 ...

  7. Java垃圾回收机制(GC策略)

    Java垃圾回收机制(GC策略) 核心:1,哪些是垃圾?[怎么确定这个是垃圾]:2,如何回收垃圾?[怎么更好收垃圾]. Java语言相对于C++等语言有一个自动垃圾回收机制,只用管使用[实例化对象], ...

  8. 关于GC进行垃圾回收的时机

    前言 今天查看一个同事的代码,发现代码中多处地方使用了GC.Collect()方法,我问他为什么这么做,他说感觉程序中定义了好多变量,怕GC回收不及时,用GC.Collect()可以手动掌控GC进行垃 ...

  9. C#或者.NET下的强制垃圾回收办法

    转载 2011年03月16日 17:21:00 标签: c# / .net / button / object / stream / class 8185 今天来谈谈C#的GC,也就是垃圾回收机制,非 ...

随机推荐

  1. 【解决了一个小问题】golang samara的kafka客户端中使用错误版本号导致初始化失败

    发现在如下代码中存储kafka生产者初始化失败: config.Version = sarama.V0_10_2_1 //V2_2_0_0 producer, err := sarama.NewSyn ...

  2. deepin20使用snap并设置代理

    snap下载 $ sudo apt update $ sudo apt install snapd https://snapcraft.io/docs/installing-snap-on-ubunt ...

  3. 使用kubeadm搭建k8s集群

    1.初始化集群信息 这里我才用了两台虚拟机来搭建集群,一个master,一个node 角色 IP地址 组件 master 192.168.126.137 docker, kubectl, kubead ...

  4. Servlet-ServletConfig类使用介绍

    ServletConfig类(Servlet程序的配置信息类) Servlet 程序和 ServletConfig对象都是由 Tomcat负责创建,我们负责使用. Servlet 程序默认是第一次访问 ...

  5. 【Vulnhub靶场】EMPIRE: BREAKOUT

    环境准备 下载靶机,导入到vmware里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2.15 靶机IP地址为:192.16 ...

  6. 负载均衡的比例(权重,ip_hash,轮询)

    目录 一:负载均衡的比例 1.轮询 2.权重 3.ip_hash 二:测试轮询 1.测试 2.重启 3.网址测试 三:测试ip_hash 一:负载均衡的比例 1.轮询 # 默认情况下,Nginx负载均 ...

  7. Mongodb全备+增备+oplog恢复误删数据

    此时测试表中有7条数据,做个全备. 全备: mongodump --host=192.168.43.43 --port=37017 --oplog --out=/opt/mongo/fullbacku ...

  8. Go 学习路线(2022)

    原文链接: Go 学习路线(2022) Go 语言的发展越来越好了,很多大厂使用 Go 作为主要开发语言,也有很多人开始学习 Go,准备转 Go 开发. 那么,怎么学呢? 我发现,在互联网时代,学习的 ...

  9. 微服务架构 | 11.1 整合 Seata AT 模式实现分布式事务

    目录 前言 1. Seata 基础知识 1.1 Seata 的 AT 模式 1.2 Seata AT 模式的工作流程 1.3 Seata 服务端的存储模式 1.4 Seata 与 Spring Clo ...

  10. new JSONObject 无异常卡顿【Maven+Idea 导包不更新的小坑】

    问题描述 今天在使用JSONObject过程中出现了一个非常不可思议的现象,我Junit测试没有问题,但是就是打开服务器运行的时候,结果就是出不来,经过多次测试发现代码竟然卡在了new JSONObj ...