栈不存在垃圾回收的问题, 直接压栈就可以了。
堆的话,需要复杂的垃圾回收机制。
垃圾回收是对堆来进行操作,堆中的对象是否有效, 是通过遍历堆栈来获取的, 就是一个引用计数的问题。
一个引用类型的实例化过程:
Class a = new Class();
1) Class a 的时候, 生成一个空的引用指针,并把他压栈到栈中。
2)new Class() 生成一个类的实例, 并且在堆上分配对应内存。
3 ) = 赋值的时候, a的引用指向新生成的实例。
当堆中的对象不再被栈中的任何变量引用的时候,就需要对这个对象进行垃圾回收。
系统变慢的一个很主要的原因就是,随着系统运行时间的增长, 内存碎片也会越来越多。就是因为程序反复在堆中创建和释入变量。久而久之,可用变量将不再是联系的内存空间。 为了寻址这些可用变量, 系统也会增加开销。