java - 如何在组件的设计阶段防止内存泄漏?

标签 java design-patterns memory-leaks

我正在开发一个用 Java 开发的基于 Web 的组件。一部分是基于webservices,另一部分是Spring-MVC框架和Hibernate作为持久层。

我仍在设计过程中 - 准备用例、 Activity 图和序列图。

我只是想知道 - 有什么具体方法可以确保设计本身不存在可能导致内存泄漏的东西。遵循正确的编码指南并进行代码审查可以确保程序中不存在内存泄漏,但设计级别又如何呢?我们是否有一些方法来设置上限,以便开发人员不必发挥他的想象力并防止泄漏。

感谢任何建议。

谢谢, 乌吉瓦尔

最佳答案

大多数内存泄漏是由实现错误引起的,在 Java 中,大多数内存泄漏是由于对所使用的技术没有充分了解而导致的。 (例如 4 种不同类型的内部类)

唯一有帮助的方法是花时间和金钱来提高开发人员的技能。 - 最佳阅读Effective Java Second Edition by Joshua Bloch

另一个经常导致内存泄漏的领域是并发性。 - 据我所知,处理这个问题(以及其他并发问题)的最佳方法是在实现它们之前定义哪些组件需要保存(以及哪些在单线程环境中运行)。如果它们需要实现线程保存,那么在实现之前定义它们到底是谁,确保它们是线程保存的(哪个函数和方法由什么保护)。

在设计中你能做的最后一件事是注意静态字段。

您认为可以通过设计做的另一件事是构建一个看门狗。如果您有(例如)一个动态列表,当列表中的某些项目丢失时,这不是一个大问题,并且您知道该列表可能是导致某些问题(线程或实现失败)的原因,那么实现一个如果列表变得比您预期的大得多,看门狗会清除列表。 (然后:修复导致问题的错误!) - 此类列表的一个示例可以是证券交易所 GUI 更新事件列表(在与股票无关的网站中)。如果一个类(class)更新没有发送到客户端,而是发送下一个类(class)更新(一秒后),那么丢失一个更新比整个服务器崩溃要好得多。

关于java - 如何在组件的设计阶段防止内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5856076/

相关文章:

java - 如果枚举是隐式静态的,为什么它们能够在内部使用 "this"关键字?

jquery - 如何在 jQuery 中选择 ul li

java - 内部类中 boolean 标志的最终数组而不是非最终变量的模式

go - 在 Go 中分配了大量内存。怎么修?

C++:在实例化类成员时使用 new 关键字与不使用关键字之间的区别?

java - 我想从服务器下载文件并在 android 中查看具有各种文件扩展名的文件,例如(pdf,doc,mp4,jpeg))

java - Log4j2 包括堆栈跟踪中的库名称

java - 将 2D double 型转换为 2D 浮点型

实体和管理器抽象的 C++ 设计

android - 内存泄漏—— Activity 的多个实例