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

Java 静态变量:如何回收内存?,java,static-members,heap-memory,Java,Static Members,Heap Memory,我创建了一个在后台持续运行的服务,它永远不会离线 对于我插入到服务中的每个较小的模块,我有点担心需要使用的静态变量。由于父服务始终处于启动和运行状态(假设它永远不会停止-完美的场景),静态成员不会随着时间的推移占用大量堆内存吗?它最终会导致我的服务崩溃吗 据我所知,静态变量一直持续到程序终止——在这种情况下,永远不会 有解决办法吗?我是否可以调用我的独立模块,而不考虑静态变量所使用的内存?它们是否可以独立运行,最终不会杀死我的JVM或服务 PS-我不认为我可以取消静态成员,我需要知道是否有一些有

我创建了一个在后台持续运行的服务,它永远不会离线

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

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

有解决办法吗?我是否可以调用我的独立模块,而不考虑静态变量所使用的内存?它们是否可以独立运行,最终不会杀死我的JVM或服务


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

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

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

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

  • 数据必须保留,并且它将适合内存-相应地配置您的-Xmx标志并测试您的假设
  • 数据必须保持,并且没有足够的空间-考虑使用持久性(例如DB) <> LI>数据不必被保留-考虑使用有界缓存,在那里删除旧的/不相关的数据项。
    “我不认为我可以去掉静态成员”-这是你应该做的。你的“插件”不应该有任何静态数据。@Mat-我最终必须这样做。我只是想知道是否有一种方法可以处理这种情况,并且您仍然可以使用静态变量。谢谢Eyal!我想可能有个解决办法。我会重新设计,尽可能避免静态变量。