【问题标题】:Storing in static instance variable in web app Java在 Web 应用程序 Java 中存储静态实例变量
【发布时间】:2016-04-30 08:48:36
【问题描述】:

假设我有一个存储Lists<?> 的静态实例变量。因为它被标记为静态,所以存储在这个变量中的内容会一直保持到类被卸载。

现在以网络应用为例。假设我正在使用像 play 和 jpa 这样的框架作为持久性。

如果我使用这个变量来坚持使用 jpa。但作为它的静态实例变量,一切都将在内存中,直到应用程序重新加载。作为一个网络应用程序,从该变量中持久保存的所有内容也将存储在内存中,直到应用程序重新加载。那么如果我不卸载类,jvm 不会耗尽内存吗?

还有什么是使用实例变量进行持久化的最佳实践

【问题讨论】:

    标签: java jpa playframework


    【解决方案1】:

    我认为使用 JPA(或任何类似技术)持久化这些对象不会改变任何事情。当你持久化一些东西时,你只是将它保存在某个地方(在这种情况下是一个数据库)。这些对象在持久化后仍然存在于内存中。

    如果它们被某些东西(在你的情况下是静态变量中的那些列表)引用,它们就不能被垃圾收集,所以如果你继续向这些列表中添加元素并且不删除它们,你最终会内存不足。

    另外请注意,如果您将这些对象存储在静态变量中,它们可能会被许多对象共享(例如:该类的实例试图添加、删除或计算元素的数量)并且您可能会遇到并发问题问题。

    【讨论】:

    • 谢谢。它非常有帮助。可以告诉我最佳做法。使用实例变量代替静态实例变量可以做到这一点吗?还是我也应该从实例变量中删除?
    猜你喜欢
    • 2012-10-24
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2014-09-18
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多