静态变量:如何回收内存?

时间:2013-05-03 07:02:26

标签: java static-members heap-memory

我创建了一个在后台运行的服务 - 它永远不会脱机。

对于我插入服务的每个较小的模块,我有点担心我需要使用的静态变量。由于父服务始终启动并运行(假设它永远不会失败 - 完美的情况),静态成员不会随着时间占用大量堆内存吗?它最终会导致我的服务崩溃吗?

据我所知,静态变量一直持续到程序终止 - 在这种情况下永远不会!!

有解决方法吗?我可以以某种方式调用我的独立模块而不考虑静态变量使用的内存 - 它们是否有任何独立运行的方式,最终不会最终导致我的JVM或服务被杀死?

PS - 我不认为我可以取消静态成员,我需要知道是否有一些使用静态成员的有效方法而不是浪费大量内存。

2 个答案:

答案 0 :(得分:1)

我不认为静态数据成员是这里的问题。这只是一个需要考虑的OOP设计方面,但它与你的记忆问题无关。

您应首先估计程序所需的内存大小,然后决定是否确实要在应用程序的生命周期内将所有这些数据保存在主内存中。这种分析的可能结果可能是:

  1. 必须保留数据,并且它将适合内存 - 相应地配置-Xmx标志并测试您的假设。
  2. 必须保留数据,且空间不足 - 请考虑使用持久性(例如DB)
  3. 实际上不必保留数据 - 考虑使用有界缓存,其中旧的/不相关的数据项被驱逐。

答案 1 :(得分:0)

如果你需要静态变量,那么应该有它的原因。如果静态变量的内容实际上是某个类的某些属性,那么它应该进入适当的类。作为程序员,您必须考虑您的设计。根据定义,静态变量总是存在的。这首先是静态的。 如果需要分配内存,当然可以只指定一个静态指针,然后就可以删除这个全局内存。但是,如果你真的需要这个,那么听起来就像是一个错误的设计。 静态变量绝对不应该是内存问题的根本原因。 如果您加载插件,那么插件负责自己的内存管理,无论如何您都无法控制它。