摘要:
既然是自动垃圾回收,那么平台肯定得采取一种方式发现垃圾,然后清除。这就是垃圾收集算法所关注的问题。垃圾收集算法的任务就是将活动的对象和已经死掉的对象分别出来,然后将死掉的对象的内存回收,而且为了更好的利用内存,有的算法还会对内存碎片进行压缩。下面会对常用的垃圾收集算法进行介绍 阅读全文
随笔档案-2011年05月
自动垃圾回收学习笔记-我们为什么需要自动垃圾回收
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一般来说会用来干这么几件事儿: 线程执行方法时传递参数,方法的局部变量,方法的返回地址等都会保存在这个栈上。 对于线程执行的每个方法都会在这个栈上占一帧,这就是所谓的栈帧。随着线程的执行,栈就 阅读全文
C#’s ~ vs Java’s finalize
2011-05-14 10:50 by 横刀天笑, 1549 阅读, 收藏, 编辑
摘要:
本文是上周写一个功能测试时,期望在测试结束时,利用Java的析构函数来关闭浏览器发现的问题,当然,这种方式是不建议采用的。因为我的背景是.NET开发,因此对Java的析构函数产生了误解。 作为一个C# Programer我们都知道,垃圾回收会帮我们回收托管资源,但那些非托管资源(比如文件句柄,数据库连接)垃圾回收是不会帮我们回收的,所以我们必须显式的回收这些资源。比如很多使用了非托管资源的类型都实现了Dispose方法,他们期望使用这些类型的开发人员能够显式的去调用这个方法来释放非托管资源,不过如果你没有显式调用那不就产生资源泄露了?别怕,还有最后的安全屏障:终结方法(不过终结方法会带来其他很 阅读全文
页面片段缓存(二)
2011-05-08 09:44 by 横刀天笑, 5145 阅读, 收藏, 编辑
摘要:
在上一篇文章中,我介绍了我们用土法炼钢的方法,使用Velocity提供的自定义标签实现片段缓存。这样的方式虽然也解决了我们的问题,但还是引出了一些bug。而且还有点hack的味道(虽然我喜欢hack)。实际上对于片段缓存,业界有成熟的解决方案,还有一个所谓的W3C标准:ESI(Edge Side Include) 阅读全文
页面片段缓存(一)
2011-05-07 14:14 by 横刀天笑, 5383 阅读, 收藏, 编辑
摘要:
一般,页面上会分为很多部分,而不同的部分更新的频率是不一样的。如果对整个页面采用统一的缓存策略则不太合适,而且很多系统的页面左上角都有一个该死的“Welcome XXX”。这种特定于用户的信息我们是不能缓存的。
对于这些情况我们就需要使用片段缓存了 阅读全文