zoukankan      html  css  js  c++  java
  • 内存回收

    何时回收

    1. window 报内存不足

    2. 强制调用GC.Collect

    3. 内存不足,正确说法是第0代对象充满时。

    4. CLR卸载AppDomain,GC将所有代龄的对象回收。

    5. 物理内存不足

    代龄(Generation):

    为啥会有这个东西,因为内存回收后会留下内存“空洞”,需要挪动内存并且对对象重定位。这样很耗性能,所有就引入generation的东西,降低垃圾回收的频率。

    微软强烈不建议通过GC.Collect方法来强制执行垃圾回收,因为会是对象代龄不断提升。

    Finalize:

    1. C#不可以显示重写Finalize方法,只能通过析构函数来实现
    2. struct 不允许定义析构函数,只有class可以,且只有一个
    3. Finalize 不能被继承或重载。
    4. 执行垃圾回收之前系统会自动执行终止化操作。

    Dispose

    实现

    Class MyDispose:IDispose
    {
        private bool _isDisposed=false;
        private IntPtr _fileHandle;
        private MangeRes _managedRes;
    
        protected void Dispose(bool disposing)
        {
            if (!_isDispose)
            {
                if(disposing)
                {
                //Release mangage resource
                _managedRes.Dispose();
                }
            
                if(_fileHandle!=IntPtr.Zero)
                {
                CloseHandle(fileHandle);
                _fileHandle = IntPtr.Zero;
                }
            } 
        }
    
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    
        ~MyDispose()
        {
            Dispose(false);
        }
    
        public void Close()
        {
            Dispose();
        }
    }
  • 相关阅读:
    hadoop分片分析
    hadoop输入分片计算(Map Task个数的确定)
    hadoop运行原理之Job运行(五) 任务调度
    hadoop运行原理之Job运行(四) JobTracker端心跳机制分析
    BlockTransferService 实现
    spark 持久化机制
    spark DiskBlockManager
    spark checkpoint机制
    hadoop InputFormat getSplits
    hadoop LineRecordReader
  • 原文地址:https://www.cnblogs.com/AlexHHC/p/3034222.html
Copyright © 2011-2022 走看看