社区
高性能WEB开发
帖子详情
到底应该等待垃圾回收还是手动释放?
callmesai
2010-12-28 10:13:20
例如SqlDataReader、StringBuilder这些~用完后需要dr.Dispose()和sb.remove(0,sb.lenght)这些释放操作?
以前我一般都是用完就等待垃圾回收机制回收(肯定先关闭的~dr.close())~现在尝试全部手动释放而不等待垃圾回收~却发现执行效率
比以前更慢
了~
请问为什么手动释放会更慢?难道是我代码的问题?
...全文
109
4
打赏
收藏
到底应该等待垃圾回收还是手动释放?
例如SqlDataReader、StringBuilder这些~用完后需要dr.Dispose()和sb.remove(0,sb.lenght)这些释放操作? 以前我一般都是用完就等待垃圾回收机制回收(肯定先关闭的~dr.close())~现在尝试全部手动释放而不等待垃圾回收~却发现执行效率比以前更慢了~ 请问为什么手动释放会更慢?难道是我代码的问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fwang004
2010-12-29
打赏
举报
回复
jvm的垃圾回收其实并不简单,它涉及到垃圾回收时间的选择,以及回收策略,合并内存碎片。不同的版本的jvm采用的垃圾回收方法并不相同,也都各有侧重。例如实时系统就会侧重保证用户程序的实时性,而一般的会更多的侧重于执行效率。建议看看jvm规范。
效率降低的话,不知道你的效率是如何测出来的。
fwang004
2010-12-28
打赏
举报
回复
据我所知,就算是你手动执行了释放操作,但是真正的内存释放还是要等到jvm的垃圾回收时才会执行。至于程序效率变低的问题,还得看你的程序是怎样的。并且,垃圾回收算法是经过优化了的,她的执行效率会是比你手动的要高。如果你是一般的程序的话,建议你还是不要手动释放。但是对于那些内存存在限制的情况,应该可以通过配置与虚拟机来解决。
callmesai
2010-12-28
打赏
举报
回复
[Quote=引用 2 楼 fwang004 的回复:]
据我所知,就算是你手动执行了释放操作,但是真正的内存释放还是要等到jvm的垃圾回收时才会执行。至于程序效率变低的问题,还得看你的程序是怎样的。并且,垃圾回收算法是经过优化了的,她的执行效率会是比你手动的要高。如果你是一般的程序的话,建议你还是不要手动释放。但是对于那些内存存在限制的情况,应该可以通过配置与虚拟机来解决。
[/Quote]
谢谢~但是有一个不明白的地方~释放只是一步的操作~这个还可以优化的吗?
而且最不明白的地方就是为什么效率反而更低了呢?难道是因为过多装箱拆箱?
谢谢~
Java学习笔记3.11.2
垃圾回收
-
垃圾回收
的实现方式
这篇学习笔记详细介绍了Java
垃圾回收
的两种主要方式:
等待
Java虚拟机自动进行和通知系统
垃圾回收
器。强调了即使
手动
通知,回收时机仍具有不确定性。还探讨了
垃圾回收
注意事项,如对象
释放
时自动调用的方法,并指出
垃圾回收
通常在需要更多内存时才会执行。文中通过案例演示了不同回收方法的效果,展示了
垃圾回收
的延迟性和顺序影响。
C#学习心得-----CLR
垃圾回收
机制
本文分享C#学习中CLR
垃圾回收
机制的心得。.NET
垃圾回收
自动进行,主要回收无引用对象,也可
手动
回收但有卡顿。介绍了
垃圾回收
器中“代”的机制,还提到对于非托管资源,可引用接口或用using方法
释放
资源
等待
回收。
C#继承IDisposable
释放
资源
本文探讨了 C# 中的 Disposable 类及其析构函数、资源管理方法和资源
释放
策略,通过实例展示了如何使用 Dispose 方法
手动
释放
资源,以及与
垃圾回收
(GC)的交互。比较了
手动
释放
资源与
等待
垃圾回收
器处理的区别,提供了优化资源管理和程序性能的见解。
Redis05——超时和
垃圾回收
Redis作为基于内存的数据集合,其内存管理至关重要,包括自动
垃圾回收
和
手动
删除操作。当内存不足时,Redis会触发类似Java虚拟机的
垃圾回收
机制,通过del命令或键值对超时来
释放
内存。超时命令允许为键设置过期时间,超时的键不会立即被删除,而是
等待
定时或惰性回收。定时回收在无业务时段执行,避免长时间停顿,而惰性回收则在键被访问时才删除已超时的键。Spring中可通过SessionCallback设置键的超时并执行相关操作。
UNITY Destroy()和DestroyImadiate()都不会立即
释放
对象内存
本文探讨了Unity中Destroy和DestroyImmediate两种对象销毁方式的区别。Destroy会在帧末移除对象,而DestroyImmediate则立即移除。然而这两种方法都不会立即
释放
对象内存,只有通过
手动
触发
垃圾回收
或
等待
.NET自动回收时,内存才会被真正
释放
。文章还提供了一个测试示例,用于观察不同销毁方式对内存的影响。
高性能WEB开发
25,980
社区成员
4,366
社区内容
发帖
与我相关
我的任务
高性能WEB开发
高性能WEB开发
复制链接
扫一扫
分享
社区描述
高性能WEB开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章