•利用局部性。通过合理利用内存层次结构,内存管理器可以影响程序的运行时间。访问不同部分内存所花费的时间可以小到纳秒大到毫秒。幸运的是,大多数程序花费大部分执行代码时间的相对较小的一部分来访问内存,并且仅接触一小部分数据。如果很可能再次访问相同的内存地址,程序具有时间局部性;如果很可能访问附近的内存地址,它具有空间局部性。
4减少碎片。当程序分配和释放内存时,堆可能会碎片化,或者分解成大量小的不连续的空闲空间。最佳拟合策略 - 分配满足请求的最小可用空间 - 已发现这个策略在实验上可以正常工作。虽然最适合倾向于提高空间利用率,但可能不是最适合空间局部性。通过组合或聚结相邻的空间可以减少碎片。
4手动分配。手动内存管理有两个常见的缺陷:不删除无法引用的数据是内存泄漏问题,引用已删除的数据是一个悬指针错误。
•可访问性。垃圾数据是无法引用或访问的数据。找到不可访问的对象有两种基本方法:捕获转换,因为可访问的对象变得不可访问,或定期找到所有可达对象,并推断所有剩余的对象是不可访问的。
•计数收集器保留对象的引用计数;当计数变为零时,对象变得不可访问。这种收集者增加了维护引用的开销,并且可能无法找到“环”垃圾,该垃圾由可能通过引用链导致彼此引用的不可访问对象组成。
•基于跟踪的垃圾收集器迭代地检查或跟踪所有引用以查找可访问对象,从包含可直接访问不必取消引用任何指针的对象组成的根集开始。
编译原理——内存管理和垃圾回收
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 【注:原文出处 http://blog.csdn.net/zhangerqing】 很多Java面试的时候,都会问...