垃圾收集会影响性能吗?

时间:2014-08-14 16:02:52

标签: performance garbage-collection

我刚刚阅读了几种编程语言的性能,我注意到垃圾收集经常被提及。垃圾收集是否会影响语言的性能?如果有,怎么样?

3 个答案:

答案 0 :(得分:3)

主要取决于语言/运行时。

在某些实现中,GC可以暂停您的应用程序(挂起线程),然后执行收集,从而导致性能问题。

某些实现会执行优化,以便在GC收集未引用的对象时运行代码。例如,.Net GC can be tuned使用不同的收集模式和对象堆,您也可以give it a hint不要在性能敏感的代码区域中运行。

我无法提供更多详细信息,因为所有这些都是特定于实现的。但我应该提一下,语言运行时最常尝试优化他们的GC很难,而且大多数时候你甚至都不会注意到它在那里。尽管在非常具体的情况下,它可能会成为一个问题,并希望有可能解决这个问题,以尽量减少GC的压力。

答案 1 :(得分:2)

这里要记住的一件事是,没有垃圾收集的语言仍然需要分配和释放对象。垃圾收集允许"免费"部分操作分批进行,有时应用程序相对空闲。换句话说,一个高效的垃圾收集器有可能更快(并不是说我们已经相当远,但它们一直在改进)。

诀窍在于,当垃圾收集确实发生时,收集者仍然需要花费资源来分析可达到的内容,什么不是,或者什么是引用计数> 0,什么不是。这是性能损失。

结果是,对于大多数垃圾收集平台,收集器是评估性能时要考虑的一个因素。垃圾收集器的净效果可能很小 - 甚至是净正值! - 在应用程序会话的整个生命周期中,但可能会出现短暂的负面影响。

答案 2 :(得分:0)

垃圾收集是一种清理未使用对象以释放资源的机制,垃圾收集器基于一个强大的算法来分配哪个对象应该是干净的,哪些不是。此过程耗费资源,因此始终建议开发人员明确释放或清理未使用的对象。

应考虑使用适当的集合来提高应用程序的性能和资源消耗。强类型和数组总是具有高优先级,以避免装箱/拆箱以及减少资源成本来管理集合。

请参阅使用Array,ArrayList,HashTable。