摘要:
既然是自动垃圾回收,那么平台肯定得采取一种方式发现垃圾,然后清除。这就是垃圾收集算法所关注的问题。垃圾收集算法的任务就是将活动的对象和已经死掉的对象分别出来,然后将死掉的对象的内存回收,而且为了更好的利用内存,有的算法还会对内存碎片进行压缩。下面会对常用的垃圾收集算法进行介绍 阅读全文
随笔分类 - 自动垃圾回收
自动垃圾回收学习笔记-我们为什么需要自动垃圾回收
2011-05-21 12:57 by 横刀天笑, 2058 阅读, 收藏, 编辑
摘要:
现代的虚拟运行时平台基本上都提供了垃圾回收的机制,其实垃圾回收是一个非常古老的技术,可以追溯到Lisp。 那么为什么要使用垃圾回收呢?这个要和显式的内存分配和释放相比较。我们或多或少的接触过或学习过这样的代码: 1: struct Node{ 2: ElementType Element; 3: Node* Next; 4: } 5: 6: Node* node = malloc(sizeof(Node)); 7: 8: //do something 9: 10: free(node);这里的malloc和free就是程序员显式的从堆上分配内存和释放不再使用的内存,将其归还给堆。这种让程序员控 阅读全文
自动垃圾回收学习笔记-一些基本概念
2011-05-21 12:53 by 横刀天笑, 1875 阅读, 收藏, 编辑
摘要:
栈和堆 首先要明确的是,这里所说的栈和堆与数据结构里所说的Stack和Heap不是一个概念。当然,这里的栈和堆的表现形式或实现形式跟数据结构里的Stack和Heap可能是一模一样。 栈 栈是跟线程相关的。比如在Windows平台上,默认情况下,你创建一个线程会给你1MB的内存空间当做栈(对于Native Code来说这1MB是按需提交的,而对于Managed Code来说是创建线程的时候就提交)。这1MB一般来说会用来干这么几件事儿: 线程执行方法时传递参数,方法的局部变量,方法的返回地址等都会保存在这个栈上。 对于线程执行的每个方法都会在这个栈上占一帧,这就是所谓的栈帧。随着线程的执行,栈就 阅读全文