问题标签 [resource-leak]

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.

0 投票
1 回答
254 浏览

python - 仍然在pickle中引用的已删除对象

在我的项目中,我会定期使用酸洗来表示流程的内部状态以实现持久性。作为正常操作的一部分,对对象的引用被添加到多个其他对象中或从多个其他对象中删除。

例如,Person 可能有一个名为 address_list(一个列表)的属性,其中包含代表他们试图出售的所有属性的 Address 对象。另一个对象 RealEstateAgent 可能有一个名为addresses_for_sale 的属性(也是一个列表),它包含相同类型的Address 对象,但仅包含在其代理机构中列出的那些。

如果卖方将其财产从市场上撤下或出售,则地址将从两个列表中删除。

Persons 和 RealEstateAgents 都是用于酸洗的中心对象(Masterlist)列表的成员。我的问题是,当我添加和删除属性并随着时间的推移反复腌制 Masterlist 对象时,腌制文件的大小会增长,即使我删除(实际上是删除)比我添加的更多的属性。我意识到,在酸洗 Masterlist 中,有一个循环引用。我的应用程序中有许多循环引用。

我使用 pickletools.dis() 检查了 pickle 文件,虽然很难人工阅读,但我看到对已删除地址的引用。我确信它们已被删除,因为即使在 unpickling 之后,它们也不存在于各自的列表中。

虽然应用程序在酸洗/取消酸洗之前和之后都能正常运行,但不断增长的文件大小是一个问题,因为该过程需要长时间运行,并且重新初始化它不是一种选择。

我的例子是概念性的,问起来可能有点牵强,但我想知道是否有人有使用泡菜的垃圾收集问题的经验,当它们包含循环引用或其他任何可能指出我调试这个正确方向的东西时. 也许一些有用的工具。

非常感谢

0 投票
1 回答
1295 浏览

java - Java中的char内存泄漏

我从 char 中得到了很大的内存泄漏。这不是我的写作,我不擅长清理内存,因此将不胜感激。这个类使用 char,所以我将从它开始。

0 投票
2 回答
743 浏览

android - Android memory leak on static Resource member variable?

Is it safe to have static reference to private static Resources mRes; in my Utils class, initalized as follows?

It seems to me it causes memory leak (log from Eclipse Memory Analyzer below)

Are there safe ways to get reference to Resources class, that is not leaking whole activity?

0 投票
3 回答
274 浏览

java - 我如何只使用一次扫描仪然后摆脱它?

我有一个java程序,我必须在其中获取用户输入,但是,我只需要获取一次用户输入,之后,我就不再需要扫描仪了。执行以下操作:

给我一个资源泄漏警告,说<unassigned closeable value> is never closed.

有没有另一种方法可以让我只使用一次扫描仪,然后就摆脱它,这样就不会出现资源泄漏?也许类似于 C# 的using声明。

0 投票
1 回答
1382 浏览

java - 在 try 块内声明 RandomAccessFile 对象会发出资源泄漏警告,但在外部声明它不会?

这是我的代码:

这段代码给了我一个警告,RandomAccessFile对象 srcFile 永远不会关闭。

但是,如果我修改我的代码并在 try 块之外声明 srcFile(如下面的代码所示),警告就会消失。

为什么会发生这种情况,因为我srcFile.close();无论如何都没有这样做?

0 投票
1 回答
3583 浏览

scala - 关闭 Kafka 连接

我有一个应用程序应该向 Kafka 发送有限数量的消息然后退出。出于某种原因,即使我关闭了生产者,Kafka 连接也会保持正常。我的实现(在 Scala 中)或多或少

Message是一个简单的案例类,我如何将其转换为字节数组并不重要。

消息确实到达了,但是当我最终调用时Kafka.close(),应用程序没有退出,并且连接似乎没有被释放。

有没有办法明确要求 Kafka 终止连接?

0 投票
1 回答
771 浏览

java - 尽管我有一个关闭最外层流的 finally 块,但 Eclipse 会警告潜在的资源泄漏,我错过了什么?

Eclipse 给我以下资源泄漏警告是否有原因:资源泄漏:'br' is never closed"?我正在谈论的代码在这篇文章的底部。

我认为我的 finally 块已经涵盖了所有内容,我的推理:

  • res 只有在 FileInputStream 构造函数抛出时才为空,因此无需关闭任何内容
  • 如果 InputStreamReader 构造函数抛出, res 将是输入流(例如格式错误的编码字符串),然后只有 InputStream 必须关闭,所以可以
  • ETC...

那么我错过了什么?或者这可能是一个日食错误?

亲切的问候!

S。

0 投票
1 回答
223 浏览

java - 尝试使用资源:关闭 TWR 块中的资源时资源泄漏

我读到我们不需要显式关闭资源,它将由 java 本身关闭,假设我编写了代码。

FileInputStream 将自动关闭,如果在关闭时产生错误,它将抑制该表达式。

那么如果在关闭 FileInputStream 时抛出异常,由于异常会被抑制,所以资源没有关闭,会不会产生资源泄漏?

0 投票
1 回答
1154 浏览

c# - 如何检测托管 C# 屏幕保护程序中的 GDI 资源泄漏?

这是我的问题......我怀疑我的 C# 屏幕保护程序中的 GDI 资源泄漏只使用托管代码。错误:多次操作后出现“内存不足”。我使用 VS Prof 2013 Update 4 编译并在 Windows 7 64bit 下运行。我尽可能使用Dispose和非静态例程。这是我的问题:

  • 作为一个屏幕保护程序,我什至无法使用 JITdebugger(应用程序加载过程只是挂起)
  • Deleaker 是 C++ 的工具,而不是 C#
  • 详细的 Internet 链接适用于 Windows 9x / Windows 2000(2001 年的 MSDN 杂志)或 Windows 2000 / Windows XP(也是 MSDN 杂志)
  • 无法下载 GDIObj(显然不可用)
  • 我可以在任务管理器中显示“GDO 对象”,但屏幕保护程序使用整个屏幕并在运行时覆盖它
  • ... 也使用来自 NirSoft 的 GDIview(奇怪的是,Explorer.exe 的 GDI 对象数量最多)

因此我的问题是......

  • 开发人员使用 Visual Studio C# 不再有 GDI 资源泄漏?
  • 可以使用 GDI+ 来不断更新屏幕吗?(在模拟应用程序中)
  • 开发人员不再使用 GDI/GDI+ 进行 2.5D 吗?(= 多层 2D)
  • 如果是这样,哪种技术最适合模拟类型的应用程序?
    • 永远运行(理论上)
    • 定期更新整个屏幕中的部分(文本和图形)
    • 实时运行(100 毫秒的差异是可以容忍的,但它必须与无线电时钟保持同步)。
    • 高分辨率图形(到 1920x1080 格式的像素),即不使用 DirectX 的低分辨率游戏;不使用单精度 GPU 算法

C# 几乎成功了!

感谢您的创造性反应...

更新 1

我在 C# 中实现了 GetGuiResources() 如下(代码提取):

我的申请显示

  • GCIcount 稳定在 38 到 42 之间
  • 18 到 19 之间的稳定 UserCount

直到故意(用户)引发的崩溃,然后才显示

  • GCI 计数 = 62
  • 用户数 = 35

即没有什么戏剧性的。

请注意,我经常在 1920 x 1080 像素位图上执行以下操作:

0 投票
0 回答
679 浏览

java - Spring ClassPathResource(file).getInputStream() 不立即释放资源

我已经将该问题作为可能的 JDK 错误提出:JDK ClassLoader.getResourceAsStream 损坏了吗?(未关闭的资源)

我正在通过以下方式从文件中读取属性(有一定间隔):

但是当我去/proc/MY_PROCESS_ID/fd列出打开的资源时,我看到我的FILENAME属性文件打开了 100 次或更多。这是有风险的,因为 1024 是大多数 unix 机器的默认限制。

它有时会降为 0(看起来像是由带有 GC 调用的 finalize() 关闭的)。

为什么在离开 try-with-resources 块后资源不会立即消失?

/proc/TOMCATPID/fd 显示很多(当前 > 1000):

我每分钟阅读此属性 2 次,其中包括几个小时后打开的大约 1000 个描述符。