自动释放池与垃圾收集有啥联系?

     2023-03-05     257

关键词:

【中文标题】自动释放池与垃圾收集有啥联系?【英文标题】:What is the connection of autorelease pool to garbage collection?自动释放池与垃圾收集有什么联系? 【发布时间】:2012-03-29 17:27:59 【问题描述】:

我从苹果文档中读到了这篇文章..

在垃圾收集环境中,释放是无操作(无操作指令)。因此,NSAutoreleasePool 提供了一个 drain 方法,它在引用计数环境中的行为与调用 release 相同,但在垃圾收集环境中会触发垃圾收集(如果自上次收集后分配的内存大于当前阈值)。因此,通常应该使用 drain 而不是 release 来处理自动释放池。

但没有理解的意思

1) “如果自上次收集后分配的内存大于当前阈值。”

2) ios 不支持垃圾收集器,那么垃圾收集器的排水管有什么用?

【问题讨论】:

老兄,我能有那个链接吗?我想自己读一下。 是的,上瘾你可以找到它developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/… 【参考方案1】:

1) 大概意思是GC记住了分配的内存量,下次调用drain时将分配的内存量与上一次比较。仅当更改足够显着时才会进行垃圾收集。

让我换一种方式来解释:垃圾收集可能很昂贵,因此您需要决定何时收集。为了避免不必要的工作,GC 可能会记住一次收集运行后的内存量(例如,使用了 25MB)。现在 GC 下一次考虑收集时,它首先决定是否值得做所有的工作。例如,如果现在使用的内存量是 25.5MB,那么它可能不值得做任何事情。但是如果现在 50MB 正在使用中,那么收集就很有用了。

2) 这个东西起源于 Mac,在那里 GC 可用。为了在 iOS 和 Mac OS X 之间实现代码共享,这些看似不必要的方法仍然存在于 iOS 上,以尽可能与 Mac OS X 保持兼容。我什至怀疑这是因为 iOS 实际上是 Mac OS X 的“分支”,因此继承了这些东西。

【讨论】:

并且对于 2) drain 仅在需要在 ios 和 mac 之间共享代码时才有用? ane for 1) 当我调用 Drain 时,它会将内存与最后一个内存进行比较,或者它会删除那些内存? @PJR: drain 也是使用 ARC 销毁自动释放池的唯一选择(尽管现在您可能会使用 @autoreleasepool 指令)。 @PJR:不,它不是在比较内存。 GC在做什么,我不知道。但是文档表明它记住了使用的内存量,并将该数字与当前使用的内存量进行比较。只有当差异足够大时,GC 才会开始清理“废弃”对象。

java内存管理——垃圾收集

...异常终止,至少无法继续运行。 Java在创建对象时会自动分配内存,并当该对象的引用不存在时释放这块内存。 java使用垃圾回收机制来监视程序的运行,当 查看详情

java垃圾回收怎么理解?

...回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。垃圾收集的意义在C++中,对象所占的内存在程序结束运行之前一直被占用,在明... 查看详情

垃圾收集机制

JavaScript具有自动垃圾收集机制,执行环境会负责管理代码执行过程中使用的内存。而C,C++之类的语言则会麻烦一些,需要手动跟踪内存的使用情况。但是在编写JavaScript代码的时候,大部分的时候,就不用再关心内存的问题,因... 查看详情

jvm垃圾收集算法

...收集算法   Java语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。 &n... 查看详情

javascript垃圾收集

javascript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。而在C和C++之类的语言中,开发人员的一项基本任务就是手工跟踪内存的使用情况,这是造成许多问题的一个根源。在编写javascript程序... 查看详情

Java/Scala 对垃圾收集有啥保证?

】Java/Scala对垃圾收集有啥保证?【英文标题】:WhatguaranteesdoesJava/Scalamakeaboutgarbagecollection?Java/Scala对垃圾收集有什么保证?【发布时间】:2014-11-0103:03:20【问题描述】:Play框架有play.api.libs.Files.TemporaryFile,它持有对File的引用,... 查看详情

javascript中的垃圾收集机制(代码片段)

   JavaScript具有自动垃圾收集机制,也就是说,执行环境会负责管理代码执行过程中使用的内存。  在编写JavaScript程序时,开发人员不用再关心内存使用问题,所需内存的分配以及无用内存的回收完全实现了自动管理。... 查看详情

java开发中啥是垃圾回收?

...。GC首先要判断该对象是否是时候可以收集。垃圾收集能自动释放内存空间,减轻编程的负担。这使Java虚拟机具有一些优点。首先,它能使编程效率提高。在没有垃圾收集机制的时候,可能要花许多时间来解决一个难懂的存储器... 查看详情

不说吴亦凡,谈谈垃圾收集器(代码片段)

...伪代码概念 垃圾收集器是一种动态内存分配器,它自动释放程序不再需要的已分配块。这些块被称为垃圾。自动回收堆存储的过程叫做垃圾收集。基本知识 垃圾收集器将内存视为一张有向可达图,该图中有一个根节点&... 查看详情

不说吴亦凡,谈谈垃圾收集器(代码片段)

...伪代码概念 垃圾收集器是一种动态内存分配器,它自动释放程序不再需要的已分配块。这些块被称为垃圾。自动回收堆存储的过程叫做垃圾收集。基本知识 垃圾收集器将内存视为一张有向可达图,该图中有一个根节点&... 查看详情

Three.js Collada - dispose() 和释放内存(垃圾收集)的正确方法是啥?

】Three.jsCollada-dispose()和释放内存(垃圾收集)的正确方法是啥?【英文标题】:Three.jsCollada-What\'stheproperwaytodispose()andreleasememory(garbagecollection)?Three.jsCollada-dispose()和释放内存(垃圾收集)的正确方法是什么?【发布时间】:2016-0... 查看详情

jvm垃圾回收机制

自动垃圾收集器自动垃圾收集器是查看堆内存,识别正在使用那些对象以及那些对象未被删除以及删除未使用对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍然维护指向对象的指针。程序的任何部分都不再引用... 查看详情

jvm垃圾回收机制

自动垃圾收集器自动垃圾收集器是查看堆内存,识别正在使用那些对象以及那些对象未被删除以及删除未使用对象的过程。使用中的对象或引用的对象意味着程序的某些部分仍然维护指向对象的指针。程序的任何部分都不再引用... 查看详情

js高程4.变量,作用域和内存问题垃圾收集

JavaScript的自动垃圾收集机制  执行环境会负责管理代码执行过程中使用的内存,编写JavaScript程序时,所需内存的分配以及无用内存的回收完全实现自动管理。原理:  找出那些不再继续使用的变量,然后释放其占用的内存... 查看详情

为啥 C# 垃圾收集器不调用 FileStream 析构函数来释放本机文件句柄

】为啥C#垃圾收集器不调用FileStream析构函数来释放本机文件句柄【英文标题】:WhyC#garbagecollectordoesn\'tcallFileStreamdestructortoreleasenativefilehandle为什么C#垃圾收集器不调用FileStream析构函数来释放本机文件句柄【发布时间】:2019-08-0416... 查看详情

未能垃圾收集所需数量的图像。想要释放 6283487641 个字节,但释放了 0 个字节

】未能垃圾收集所需数量的图像。想要释放6283487641个字节,但释放了0个字节【英文标题】:failedtogarbagecollectrequiredamountofimages.Wantedtofree6283487641bytes,butfreed0bytes【发布时间】:2021-06-2704:44:50【问题描述】:我搜索了许多网站和文... 查看详情

python如何让程序一直运行且内存资源自动释放?

用whileTrue死循环发现内存会缓慢增加,循环最后del掉变量也没用,有什么好方法吗这当然是和代码写法有关,不贴出来就无法解决参考技术A象的引用计数减少;函数运行结束,所有局部变量都被销毁,对象的引用计数也就随之... 查看详情

java的垃圾收集,gc是什么?为什么要有gc?

...程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自... 查看详情