gpt4 book ai didi

java - Java 标准 API 中的内存泄漏陷阱

转载 作者:IT老高 更新时间:2023-10-28 20:33:39 24 4
gpt4 key购买 nike

Java 标准 API 的哪些类在以(不是很明显)不正确的方式使用时会导致内存泄漏?以及如何避免/修复这些内存泄漏?

示例: ObjectInputStreamObjectOutputStream 保留对他们看到的所有对象的引用,以便将同一对象的后续出现作为引用发送,而不是比副本(从而处理循环引用)。当您无限期地保持此类流打开时(例如,当使用它通过网络进行通信时),这会导致内存泄漏。

修复:定期或在每个顶级对象之后调用 reset()。

最佳答案

一个很大的问题是获取Java字符串的子字符串是指原始字符串。

示例:您读取 3000 个字符的记录并获得一个 12 个字符的子字符串,然后将其返回给调用者(在同一个 JVM 中)。即使您没有直接引用原始字符串,那 12 个字符的字符串仍在内存中使用 3000 个字符。

对于接收然后解析大量消息的系统,这可能是一个真正的问题。

您有几种方法可以避免这种情况:

String sub = new String(str.substring(6,12));

String sub = str.substring(6,12).intern();

第一个更明确。第二个有其他含义,因为您使用的是 PermGen 空间。过度使用你可能会用完,除非你给你的虚拟机足够多。

请记住,这仅在您使用较小的子字符串然后丢弃原始字符串并且您经常这样做时才相关。

关于java - Java 标准 API 中的内存泄漏陷阱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1281549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com