关于对象回收原理及拓展

一切从简单开始 2018-03-16 10:26:08
c#中关于垃圾回收机制的解释:

垃圾回收机制,无非就是回收垃圾,那么如何对垃圾进行回收分类。回收垃圾的目的无非是容易导致内存溢出,程序进程执行缓慢;在c#中垃圾回收是先将所有对象都归类于需要回收垃圾然后通过标记去选中还在使用的对象,这样未被标记的对象则就是需要回收的垃圾,最后对需要回收的对象进行压缩处理(需要学习的是:在这里c#采用了以根文件为主所以在压缩的过程中就大大缩小了需要压缩的时间), Generational 分代算法相当于是处理垃圾对象的一种算法(核心是对垃圾对象进行不同的分类对新旧对象采用不同的回收策略,其中假设生命周期长的是老的对象,新对象生命周期短) 在c#这一块只对托管资源有效,非托管资源需要用户自己操作,我觉得对于非托管资源可以根据其资源的被引用情况(例如本来一个对象可以做的事情,分配给两个对象,让代码中特定对象的公用性更高),栈的引用指向堆中的对象那么栈有点像虚拟的内存而堆是真实的内存,可以确定栈中的引用肯定是唯一的,那么为什么不把栈的引用和map集合联系起来(堆和栈相当于map的value和key)
Jvm垃圾回收机制:

java其实也一样采用的是标记式算法,好像每一个对象都要去一次垃圾回收管理中,如果你被标记了那么你还有救(有人会问为什么不标记需要回收的?那你还记不记得有一个新和老的区别如果多次标记那么就是多次来过回收管理机制中了所以生命周期应该比较长,所以通过标记来判断对象的生命周期)

怎么让这些对象能够很快的被清除好像也是分代算法:

还有一个疑问?为什么他们要将所有的对象都去过一次垃圾回收机制呢?问什么不讲那些没有被引用的类或者对象去垃圾回收管理就行了?这样岂不是少了好多的时间?从垃圾的筛选过程中,同时垃圾的筛选基数大大减少?

...全文
308 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
大家说说看法啊,别只浏览

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧