0

我创建了一个在后台持续运行的服务——它永远不应该离线。

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

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

有解决方法吗?我可以以某种方式调用我的独立模块而不考虑静态变量使用的内存 - 有什么方法可以独立运行并且最终不会杀死我的 JVM 或服务?

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

4

2 回答 2

1

我不认为静态数据成员是这里的问题。这只是要考虑的 OOP 设计方面,但与您的内存问题无关。

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

  1. 必须保留数据,并且它将适合内存 - 相应地配置您的 -Xmx 标志并测试您的假设。
  2. 必须保留数据,并且没有足够的空间 - 考虑使用持久性(例如 DB)
  3. 数据并不一定要保留 - 考虑使用有界缓存,其中旧的/不相关的数据项被逐出。
于 2013-05-03T07:13:29.847 回答
0

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

于 2013-05-03T07:12:23.717 回答