社区
高性能WEB开发
帖子详情
到底应该等待垃圾回收还是手动释放?
callmesai
2010-12-28 10:13:20
例如SqlDataReader、StringBuilder这些~用完后需要dr.Dispose()和sb.remove(0,sb.lenght)这些释放操作?
以前我一般都是用完就等待垃圾回收机制回收(肯定先关闭的~dr.close())~现在尝试全部手动释放而不等待垃圾回收~却发现执行效率
比以前更慢
了~
请问为什么手动释放会更慢?难道是我代码的问题?
...全文
103
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]
谢谢~但是有一个不明白的地方~释放只是一步的操作~这个还可以优化的吗?
而且最不明白的地方就是为什么效率反而更低了呢?难道是因为过多装箱拆箱?
谢谢~
什么是
垃圾回收
(GC)?常见的
垃圾回收
算法有哪些?
垃圾回收
(Garbage Collection,GC)是一种自动化内存管理机制,主要用于识别和回收程序中不再使用的内存空间,从而避免内存泄漏、提升内存利用率,并降低程序员
手动
管理内存的复杂度。其核心思想是将程序不再引用的内存块标记为“垃圾”,并自动
释放
这些资源以供后续重用。
垃圾回收
通过自动化内存管理显著提升了开发效率和程序稳定性,但需权衡性能开销与内存利用率。复制算法适合短生命周期对象,标记-整理解决老年代碎片问题,分代收集综合优化生命周期差异,而引用计数则提供低延迟回收但需处理循环引用。
C#
垃圾回收
利弊分析:
手动
释放
场景全解析!
C#作为一种广泛应用的语言,其
垃圾回收
机制一直是开发者们关注的重点。C#的
垃圾回收
器(Garbage Collector, GC)负责自动管理内存的分配和回收,极大地简化了开发者的工作。然而,任何技术都有其利弊,C#
垃圾回收
也不例外。同时,在某些特定场景下,
手动
释放
资源显得尤为重要。
java
手动
释放
内存对象 finalize_Java中GC(
垃圾回收
)算法
github上的地址:DevelopBlog与C语言不同,Java内存(堆内存)的回收由JVM垃圾收集器自动完成,不需要程序开发者
手动
释放
内存。从Java内存模型(链接)一文中,我们知道,java中几乎所有的对象实例存储在堆内存中,故而堆内存是JVM
垃圾回收
的主要阵地。哪些对象需要被回收?在讨论GC之前我们需要考虑一个问题?如何确定一个对象是否需要被回收?两个方法:引用计数法和可达性分析法。引用计...
Java中的
垃圾回收
是什么?Java有哪些内置的垃圾收集器?
在Java中,
垃圾回收
(Garbage Collection,GC)是自动管理对象生命周期的一种机制,这意味着开发者无需
手动
释放
内存,
垃圾回收
器会自动回收不再使用的对象所占用的内存。Java提供了多种内置的垃圾收集器,这些收集器基于不同的算法和策略,以满足不同场景下的内存回收需求。Java中的内存泄漏通常是由于对象不再需要,但它们仍然存在于堆内存中,导致可用内存不断减少,最终导致程序性能下降或崩溃。然后我们改变了对对象的引用,使其不再有效,这样JVM就可以回收该对象的内存空间了。这个例子中,我们有一个类。
一文看懂:JVM
垃圾回收
算法、CMS
垃圾回收
器、G1
垃圾回收
器
Hello,大家好,我是此林。今天我们来聊一聊 JVM
垃圾回收
机制。在C/C++这类没有自动
垃圾回收
机制的语言中,一个对象如果不再使用,需要
手动
释放
,否则就会出现内存泄漏。内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。
手动
回收的方式相对来说回收比较及时,删除代码执行之后对象就被回收了,可以快速
释放
内存。缺点是对程序员要求比较高,很容易出现创建完对象之后,程序员忘记
释放
对象。
高性能WEB开发
25,980
社区成员
4,366
社区内容
发帖
与我相关
我的任务
高性能WEB开发
高性能WEB开发
复制链接
扫一扫
分享
社区描述
高性能WEB开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章