讨论一下“自动垃圾收集”的原理如何?参加者有分 应该类似与COM的引用计数机制吧。关于Java的GC资料应该是很多的,不过中文的好像没有。中国人对Java不感兴趣。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 实际上,需要一个基类抽象tobj,然后需要一个单件模式的管理器tb负责进行指针管理即可。然后,你的类体系以tobj为顶级节点开始生长,一切搞定。不推荐重载new,表面看来似乎是釜底抽薪的最佳解决,但是其他的类库的工作,其他代码的工作可能会因此错误。 //nod但是我觉得关键在于“怎么判断对象没有引用?”,也就是说如何判断对象出了作用域? 那正是Java所付出的代价。只不过Java由于是从头做起,于是还可以采用一些算法来提前进行部分回收,如同你所期望的那样进行工作着。这是必然的结果。你可能会有一些局部性的方法尽可能尽快回收,但恐怕不会是全局性的,这涉及到的复杂性会使得你这个工作慢而且累,没有必要。界面清理之前:主窗口收到WM_QUIT时,开始清理所有程序的窗口资源之前。这时候,一般会清理一部分不需要的数据,结束线程等等,然后,会关闭所有窗口,然后会结束全部其他线程,清理其他全局性数据,最后关闭主线程(即进程),完成最后的关闭动作。 也对。编译器还得知道那个对象是一个副本(引用),还是是原件。但是,C++已经支持上述特性了,这对于栈上的对象适用。堆对象的目的就是为了给你提供自行管理内存的能力,当然应该自行负责其释放。所以Java不使用指针,也并不提供你自行管理内存的能力。事实上,我情愿手写释放语句。 我想需要自己建立强大的内存管理机制,实现内存的管理,Apache服务器软件使用链表实现了自己的内存管理模块,C++本身没有这种功能,所以只能自己实现,方法有二。(1)自己建立强大的内存管理机制(2)类似于COM的智能指针 Apache服务器的内存管理方法与C/C++差不太多。C/C++把内存分配、回收的方法作为语言级别已经实现了,唯一与Java不同的是它把选择何时回收垃圾的权利交给了程序员而不是编译器,以实现更大的灵活性。比如你申请了一个n兆的内存块,那么在C/C++中不用的话,用Free/delete干掉即可。而在Java/C#中,你必须等待虚拟机在某个它认为合适的时候才会释放它。 虚拟机是以类似辅助线程的形式来进行垃圾回收的。这也是Java程序效率不高的一个原因——你的执行时间片被划分的很细,中间插入了很多C/C++中没有的垃圾回收片断。 classfactory说得很是。另外,智能指针也是正解,只是有点费解。(我刚刚回答一个smart pointer问题,已经说得眼花花了,不想再考虑这个问题了) 如何获取显卡的温度 如何用滑条调节界面亮度 RichEdit控件插入ActiveX的问题?????? 怎样能够90度旋转一个CBitmap? 我找了好久都没有找到 -_,- [求助]各位请帮忙,关于怎么用Voip在两台电脑间通话! 我创建一个对话框,上面添加一个Button,怎么样让我点击Button,对话框就最小化? 如何改变对话框以及按钮的背景色 MFC中的界面线程,如果不手动给其m_pWndMain成员变量new一个CWnd *,会怎样? 求教一个API函数 为什么这个冬天是冷冬? 如何建立字符串的索引? 请问一下关于COLORREF的使用方法,谢谢
然后,你的类体系以tobj为顶级节点开始生长,一切搞定。不推荐重载new,表面看来似乎是釜底抽薪的最佳解决,但是其他的类库的工作,其他代码的工作可能会因此错误。
但是我觉得关键在于“怎么判断对象没有引用?”,也就是说如何判断对象出了作用域?
这时候,一般会清理一部分不需要的数据,结束线程等等,然后,会关闭所有窗口,然后会结束全部其他线程,清理其他全局性数据,最后关闭主线程(即进程),完成最后的关闭动作。
编译器还得知道那个对象是一个副本(引用),还是是原件。但是,C++已经支持上述特性了,这对于栈上的对象适用。堆对象的目的就是为了给你提供自行管理内存的能力,当然应该自行负责其释放。
所以Java不使用指针,也并不提供你自行管理内存的能力。事实上,我情愿手写释放语句。
Apache服务器软件使用链表实现了自己的内存管理模块,
C++本身没有这种功能,所以只能自己实现,方法有二。
(1)自己建立强大的内存管理机制
(2)类似于COM的智能指针
Apache服务器的内存管理方法与C/C++差不太多。C/C++把内存分配、回收的方法作为语言级别已经实现了,唯一与Java不同的是它把选择何时回收垃圾的权利交给了程序员而不是编译器,以实现更大的灵活性。比如你申请了一个n兆的内存块,那么在C/C++中不用的话,用Free/delete干掉即可。而在Java/C#中,你必须等待虚拟机在某个它认为合适的时候才会释放它。 虚拟机是以类似辅助线程的形式来进行垃圾回收的。这也是Java程序效率不高的一个原因——你的执行时间片被划分的很细,中间插入了很多C/C++中没有的垃圾回收片断。