回 帖 发 新 帖 刷新版面

主题:VB也有垃圾回收机制么?

这阵子在学php,听到PHP和JAVA的垃圾回收机制我就想起了VB的set fs=nothing
这是不是种垃圾回收机制?
如果是,那VB岂不是很超前?

回复列表 (共6个回复)

沙发

这一句的意思是释放对象所关联的所有系统及内存资源,不知是否可算作你所说的垃圾回收机制?

板凳

汽车电子  DSP   MCU  http://ee.ofweek.com/
工业控制  运动控制  人机界面  http://gongkong.ofweek.com/
LCD  触摸屏 http://display.ofweek.com/ 
测试仪器  自动化仪表 http://instrument.ofweek.com/

3 楼

恩,我在学习这个的时候,看到
[quote]在VB、C++等某些程序设计语言中,无论是对象还是动态配置的资源或内存,都必须由程序员自行声明产生和回收,否则其中的资源将不断消耗,造成资源的浪费甚至死机。由于要预先确定占用的内存空间是否应该被回收是非常困难的,这就导致手工回收内存往往是一项复杂而艰巨的工作。因此,当使用这些程序设计语言编程时,程序员不仅要考虑如何实现算法以满足应用,还要花费许多精力考虑合理使用内存避免系统崩溃。

针对这种情况,JAVA语言建立了垃圾回收机制。JAVA是纯粹的面向对象的编程语言,其程序以类为单位,程序运行期间会在内存中创建很多类的对象。这些对象在完成任务之后,JAVA的垃圾回收机制会自动释放这些对象所占用的空间,使回收的内存能被再次利用,提高程序的运行效率。垃圾回收不仅可以提高系统的可靠性、使内存管理与类接口设计分离,还可以使开发者减少了跟踪内存管理错误的时间,从而把程序员从手工回收内存空间的繁重工作中解脱出来。

二、对象的失去引用
……
三、对象离开作用域
……
[/quote]

而在vb中,对象也会在失去引用或离开作用域时自动释放,
尽管知道这两种“垃圾回收”是原理不同的,但从结果上看,二者都实现了 new过之后不用delete 也不会使内存耗尽


4 楼

看了你的引用文章,我觉得 set fs=nothing 虽然可以算作回收垃圾的方法,但还称不上“机制”,机制是自动进行的,不需要使用 set fs=nothing 这之类的语句来进行人工干预,所以,VB是没有垃圾回收机制的。

5 楼

Set fs = Nothing本身就是一个蛮多余的语句,fs如果是局部变量,函数调用结束后自然会给释放,这时候fs指向的对象的被引用数减一,如果没有其他地方引用,自然会被释放掉。
很明显,vb有垃圾回收机制。

6 楼

垃圾回收机制, 是说的内存及时释放是么?如果是的话那我个人的观点,所有的语言的垃圾回收机制都有不过是建立在堆栈的机制上的,这个过程才相对于智能一些!其实机制这个词也只能用在这种堆栈型变量的释放的时候。学过堆栈结构的朋友都应该明白这原原本本的就是一个堆栈机制。除些之外只能用方法。比如你自己用API向系统申请内存的时候。可以指向得到一个这块内存的地址。这个申请过程在WINDOWS系统的机制里:WINDOWS只知道有一个程序申请使用了这块内存而不知道什么时候不需要用了!所以释放的过程要求程序自己来告诉操作系统!学习过COM的朋友也知道,COM的规范里面很多参数很据实据的需要有的要求有被调用都来释放,有的要求调用者自已来释放!!!程序设计都最好在自己的程序里也自己构造一个栈式的结构来管理内存是最好的方法,不要去依赖语言本身的这种机制,语言本身不可能对软件设计者使用内存需要制订出机制,如果有那这个语言本身也很有局限性!

我来回复

您尚未登录,请登录后再回复。点此登录或注册