.Net的垃圾自动回收机制之一

news/2024/7/20 12:39:50 标签: 内存管理, java

.Net的垃圾自动回收机制之一

内存管理是软件开发过程中相当重要的一环。据调查,软件故障中大多数异常均是于内存管理相关,比如野指针,比如重复释放,再比如内存泄露等。

为提高软件开发效率,很多开发平台如.Net, Java 等提供了垃圾自动回收机制(GC),替开发人员管理内存。

那么这垃圾回收机(GC)是如何分配内存的?又是如何释放垃圾内存的?GC有内存碎片的问题吗?

在开始回答这些问题之前,我们先来看一下CLR堆的管理结构,CLR堆有两种工作模式:工作站模式与服务器模式。

从上图可以看出服务器模式与工作站模式最主要的区别在于服务器模式在每一个处理器上都单独部署了一个CLR堆。

每一个CLR堆由两部分组成,即小对象堆(Small Object Heap)与大对象堆(Large Object Heap), 而不管是 Small Object Heap 还是Large Object Heap 都是堆段组成, 其中Small Object Heap 第一个堆段被称作是临时段(Ephemeral Seg

Large Object Heap 顾名思义,就是管理大对象的堆,超过85000Bytes)的对象在Large Object Heap上分配。

CLR堆为什么要如此设计?关键在于CLR堆在内存回收里有一个内存压缩整理动作,而对象的压缩整理耗时与对象大小有直接关系,所以CLR堆为减少GC的时间,设计了Large Object Heap, 也就是说Large Object Heap在垃圾回收过程中没有压缩整理过程。

 

通过SOS.dll的扩展命令eeHeap可以查看内存情况,

从上图可以看到,CLR 堆有一个Large Object Heap 范围在0313000~03135328

一个临时堆(02131000~02135ff4),该临时堆初分成了generation 0,generation 1,generation 2.

后面将会谈到CLR堆的generation 管理机制。 未完待续


http://www.niftyadmin.cn/n/853735.html

相关文章

enum的使用

1,声明并定义自己需要的enum,比如: private enum titleType{DKD,INVEST,ACCOUNT,MORE } 2,在需要的地方使用switch--case进行判断,比如 private void initTitle(String string,titleType type){switch(type){case DKD:break;case INVEST:break;case AC…

计算机多用户间软件共享文件,网络中的独立应用、共享应用指的是什么?

软件还可以根据在局域网中的用户数分类:1.单用户软件——单用户软件在用户自己的本地计算机上运行。一般单用户应用对网络的需求较低,因为处理和存储工作一般在本地进行。存储在文件服务器中的单用户应用软件可以通过局域网被多个工作站下载到…

[翻译]PhpGACL手册(四)

这两天我的本本出问题了,老是显示屏变黑,修已经修了七百多大洋了,可还是过了几个月又坏了,没见好,真是郁闷呀!得出的结论是象这种万元以内的本本 (我用的是京东方T200)还是少买为妙。…

StringTokenizer的用法

能将一个字符串按照指定字符进行分割,默认为空格 package Test; import java.util.*; public class test0408 {public static void main(String[] args) { StringTokenizer st new StringTokenizer("123/456", "/"); while(st.hasMoreEleme…

解决卸载Python时报错:No Python 3.7 installation was detected

卸载python时,不要自己删python文件!!!!!否则可能会报问题:No Python 3.7 installation was detected 如果已经删了文件,从回收站恢复回来,在控制面板中->卸载->卸…

哈工大物理学专业计算机知识怎样,[转]哈工大计算机专业视频集

http://www.syzy.com.cn/bbs/viewthread.php?tid4501用迅雷,亲测有效,多等一会1.动态网页设计***************http://tod3.hagongda.com/csmedia/计算机专业(高起本)/动态网页设计/第35讲.csf操作系统***************http://tod3.hagongda.com/csmedia/…

android WebView开发

1、在布局文件中声明WebView 2、在Activity中实例化WebView 3、调用WebView的loadUrl( )方法,设置WevView要显示的网页 4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图 5、用WebView点链接看了很多页…

shell神器curl用法笔记

转载:http://www.cnblogs.com/bugY/archive/2012/06/05/2537030.html?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051##基本用法(配合sed/awk/grep) $curl http: //bpsky.net ##下载保存 …