自動記憶體管理
2.銷燬資源狀態,垃圾收集器並不清楚怎樣執行清理工作開發人員必須編寫執行這部分工資的程式碼這些程式碼一般被放在"Finalize,Dispose以及Close方法中"。
3.代齡的機制惟一目的就是提高垃圾收集的效能。
4.首先:我們不必再自己實現程式碼來管理應用程式中物件的生存期.
其次:應用程式將不可能再發生記憶體洩漏的情況。
5.任何封裝了非託管資源的型別都必須支援一種稱作終止化的操作.
終止化操作允許一種資源在它所佔用的記憶體被回收之錢首先執行一些清理工作。
6.當垃圾收集器判定一個物件為可收集的垃圾時,它便會呼叫該物件的Finalize方法。
/*------------------------------------------------------------------*/
//隱式裝換定義
public static implicit Operator Inptr(OShandle oshandle)
{
return oshandle.ToHandle();
}
7.有4種事件會導致一個物件的Finalize方法被呼叫
一、第0代物件充滿。
二、顯示呼叫System.GC的靜態方法Collect。
三、CLR解除安裝應用程式集。
四、CLR被關閉。
Finalize方法呼叫了AppDomain的IsFinalizeingForUnload方法如果物件的Finalize方法是由於應用程式域解除安裝而被呼叫的那麼該方法將返回true。
一個物件要成為終止化物件,那麼在它的型別及器基型別總(除Object之外)必須至少有一個重寫Object的Finalize方法。
終止化呼叫過程:
垃圾收集 呼叫
終止化連結串列----------------->終止化可達佇列---------->Finalize------>清除終止化可達佇列項-----(垃圾收集)--->釋放物件記憶體
Dispose模式:
提供給使用者多種選擇(雖然它們執行程式碼是相同的)。
using編譯器會自動產生一個try塊和一個finally塊在finally塊中編譯器會產生程式碼變數轉型一個IDisposable介面,並呼叫其上的Dispose方法.using語句只能用於那些實現了IDisposeable介面的型別。
使物件復甦:
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1~SomeType()
2{
3Application.Objhoder= this;
4//保證了下次銷燬SomeType物件依然會呼叫Finalize方法
5GC.ReRegisterForFinalize(this);
6}
7
8//利用復甦設計一個物件池:
9Calss Expensive
10{
11static stack pool = new stack();
12public static Expensive GetObjectFromPool()
13{
14return (Expensive)pool.pop();
15}
16public static void StutdownThePool()
17{
18pool = NULL;
19}
20public Expensive()
21{
22pool.push(this);
23}
24~Expensive()
25{
26if(pool != NULL)
27{
28GC.ReRegisterForFinalize(this);
29pool.Push(this);
30}
31}
32}
物件的代齡:
代領是旨在提高垃圾收集器效能的一種機制。
幾點假設:
一、物件越新,其生存期越短。
二、物件越老,其生存期越長。
三、對託管堆的一部分執行來及收集要比對整個拖管堆執行垃圾收集速度快。
程式設計控制垃圾收集器:
System.GC型別為我們的應用程式提供了直接控制垃圾收集器的一些方法:(強制執行垃圾收集)
//Generation指定收集第一代垃圾
void GC.Collect(int32 Generation);
void GC.Collect();
// 掛起呼叫執行緒直到處理終止化可達佇列的執行緒清空了該佇列
void GC.WaitForPendingFinalizers();
//確定物件所處的代齡
Int32 GetGeneration(Object obj);
Int32 GetGeneration(WeakReference wr)
併發收集:
控制皮膚---->管理工具------>.Net Framework Configuration---->應用程式-------->新增一個應用程式或者選擇一個現存的應用程式----------->屬性-------->垃圾回收模式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-466048/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- JVM學習-自動記憶體管理JVM記憶體
- JVM學習筆記——自動記憶體管理JVM筆記記憶體
- JVM自動記憶體管理機制 二JVM記憶體
- oracle 11g自動記憶體管理Oracle記憶體
- ORACLE AMM 、ASMM 、自動記憶體管理(官方手冊)OracleASM記憶體
- 記憶體管理 記憶體管理概述記憶體
- golang手動管理記憶體Golang記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- JVM 自動記憶體管理機制及 GC 演算法JVM記憶體GC演算法
- 【記憶體管理】記憶體佈局記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- 自動記憶體管理機制_執行時資料區域記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- C語言之動態記憶體管理C語言記憶體
- 深入理解Java虛擬機器筆記-自動記憶體管理機制Java虛擬機筆記記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 深入理解Java虛擬機器(自動記憶體管理機制)Java虛擬機記憶體
- Flink記憶體管理記憶體
- 記憶體管理-swMemoryGlobal記憶體
- MySQL記憶體管理MySql記憶體
- JavaScript 記憶體管理JavaScript記憶體
- iOS 記憶體管理iOS記憶體
- Android記憶體管理Android記憶體
- OC記憶體管理記憶體
- C++動態記憶體管理——new/deleteC++記憶體delete
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- Linux實體記憶體管理Linux記憶體
- Redis4.0如何自動清理記憶體碎片Redis記憶體
- C++記憶體管理C++記憶體
- Windows記憶體管理-分段Windows記憶體
- JavaScript的記憶體管理JavaScript記憶體
- CF的記憶體管理。記憶體
- HotSpot JVM 記憶體管理HotSpotJVM記憶體
- iOS 記憶體管理MRCiOS記憶體
- “理解”iOS記憶體管理iOS記憶體
- iOS 記憶體管理研究iOS記憶體