问题标签 [garbage-collection]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我如何发现永久代中的内容
给定一个堆转储或一个正在运行的虚拟机,我如何发现永久代的内容是什么?我知道“jmap -permstat”,但这在 Windows 上不可用。
.net - .NETCF 中的内存泄漏 - 创建动态控件?
我在 .NET CF 应用程序中遇到内存泄漏问题。
使用RPM我发现动态创建控件不会像预期的那样被垃圾收集。在 .NET 窗口窗体中运行同一段代码的行为会有所不同,并且会按我的预期处理控件。
通过 PerfMon 查看 RPM 的输出以了解进程堆计数器:
GC 堆:
我最好的猜测是,对面板的弱引用是由于某种未知的原因导致对象没有资格进行 GC,可以吗?
请注意:尽管Dispose()解决了示例的问题,但我无法轻松地将其合并到现有应用程序中,因为它无法明确确定对象何时不再使用。
我已经包含了一个简化版本的源代码来说明这个问题:
更新:
1. 调用 GC.Collect() 也不会导致面板被清理。
2. 在 Windows CE 4.2 设备上使用 .NET CF 2.0 SP1。
cocoa - Cocoa 分布式对象、GC 客户端、非 GC 服务器
我有一个设置,其中有两个 Cocoa 进程,与分布式对象 (DO) 通信。客户端正在使用垃圾收集,服务器没有。
似乎客户在我对它们的直接引用之外挂在遥远的对象上。这意味着即使在我没有对这些对象的引用之后,它们也会在 NSDistantObjectTableEntry 拥有的周围徘徊。显然,它们不会在服务器上被释放。
只有当客户端退出时,它才会放开所有远处的对象。手动断开连接可能也可以,但我不想在客户端运行时这样做。
有没有办法告诉 GC'd DO 客户端放弃不再在本地引用的远程对象?
flash - 电影剪辑未从字典中删除
我有一个字典,其中保存了movieclips 的数据,如果我停止使用movieclips,我希望数据被垃圾收集。我正在使用弱键参数,它与其他数据完美配合,但是我遇到了问题。
这段代码很好用:
但是当我实际使用影片剪辑时,它停止工作:
为什么会这样?是我做错了什么吗?有解决方法吗?
编辑:我知道对于这个特定的例子我可以使用delete dic[mc]
,但当然这是一个简化的例子。一般来说,我不想手动从字典中删除影片剪辑,但是当我在应用程序的其余部分不再引用它时,它应该是自动的。
Edit2:我尝试测试 Aaron 所说的话,并想出了一些奇怪的东西......只是迭代字典(不做任何事情)改变了行为:
这会保持每帧打印 [object Movieclip],除非我注释掉指示的行,它不会打印任何内容。
java - Java very large heap sizes
Does anyone have experience with using very large heaps, 12 GB or higher in Java?
- Does the GC make the program unusable?
- What GC params do you use?
- Which JVM, Sun or BEA would be better suited for this?
- Which platform, Linux or Windows, performs better under such conditions?
- In the case of Windows is there any performance difference to be had between 64 bit Vista and XP under such high memory loads?
apache-flex - 调用 removeChild() 时 Flex 中的垃圾收集 - 管理竞争条件
我在 Flex 中有一个“框架”,它加载和销毁子“部分”,它们是模块类的实例。它们中有很多网络服务和动画,并且是面向公众的网站的一部分。
在我从屏幕上删除一个部分之前,我在实例上调用了一个“hideSection()”接口方法。在这种方法中,我会淡出任何控件,或者如果该部分想要防止自己被关闭,则返回 false。目前它还停止运行任何 Timer 实例。
问题是即使从舞台上移除了部分对象,也可能会有一些未完成的事情发生。例如,我可能会在 effectEnded 触发某些东西的地方运行效果,或者缓慢的 Web 服务请求可能会超时并导致错误弹出。
由于垃圾收集器的工作方式 - 有时该对象对象会更快地被杀死,而其他时候则更晚。一旦某个部分关闭,我会尽量减少发生的坏事。
我想出了以下可能的解决方案。想知道有没有更好的。
- 有一个设置为 true 的 _disposed 属性。在任何可能有不良行为的事件处理程序中(在该部分关闭后)我只想说
if (_disposed) { return; }
. - 可能还需要实现“IDisposable”接口,例如在 .NET 中。
这真的是我唯一的选择吗 - 或者我可以以某种方式加快垃圾收集。如果效果仍在运行,垃圾收集甚至会发生吗?
我也很好奇是否应该将事物设置为 _null,尤其是计时器。或者,如果没有对它的引用,只需 stop() 一个计时器就足以让它被垃圾收集。
algorithm - 有哪些确定性垃圾收集算法?
通过确定性,我含糊其词的意思是可以用于关键的实时软件,如航空航天飞行软件。垃圾收集器(以及与此相关的动态内存分配)是飞行软件中的大禁忌,因为它们被认为是非确定性的。但是,我知道对此正在进行研究,所以我想知道这个问题是否已经解决。
我还在问题中包括了任何对它们的使用方式施加限制的垃圾收集算法。
garbage-collection - 您是否应该在完整的垃圾收集中首先收集年轻代?
我正在编写一个包含分代垃圾收集器的程序。只有两代人。我想知道的是:在进行完整收集时,我是否会通过首先收集较年轻的对象,将幸存者提升到老年代,然后收集老年代来获得任何收益(性能方面),还是应该只是垃圾收集所有一扫?我不确定人们通常会采用哪种方式。
我现在使用的是两步法,因为它实现起来有点简单,但也许一步法会更有效?
垃圾收集器是非复制的,如果这很重要的话。
java - Java 并发和并行 GC
本文建议使用-XX:+UseParNewGC
“To enable a parallel young generation GC with the concurrent GC”。
我的困惑是,为了同时启用并行和并发 GC,我应该
- 使用
-XX:+UseParNewGC
或 - 同时使用
-XX:+UseParNewGC
和-XX:+UseConcMarkSweepGC
?
附言
我正在使用 JVM 6。
garbage-collection - 完整的用户数据 __gc 元方法是否需要释放()它的内存?
我在用 C 编写的 Lua 模块中有一个完整的用户数据。用户数据有__gc()
元方法,由垃圾收集器调用。lua解释器在__gc()
调用后释放用户数据内存,还是我必须在free()
里面__gc()
?