微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

静态变量的需求及其在jvm上的开销

如何解决静态变量的需求及其在jvm上的开销

| 根据关于静态成员的概念,当第一次对其类进行调用时,将它们创建/加载到内存中。它们在该类的所有实例中都是常见的。意味着它们不会被重新创建或重新初始化等。此外,只能通过类名称访问它们。无需仅为访问它们而为该类创建对象。 现在我的问题是; 静态成员是否曾经在 内存,直到应用程序 跑步?即使所有实例 该类的被收集 GC(垃圾收集器)。 对于一个大型项目,需要8-10个团队 在一起工作,他们不在乎 关于其他团队的编码。 他们可以创建静态成员为 根据他们的需要。如果所有成员 被缓存在内存中,不是吗 在JVM上产生开销? 认情况下,接口的所有成员均为STATIC,并且在许多情况下都可以很好地使用接口。但是,如果我牢记上述问题,是否仍应使用接口?     

解决方法

        1)静态成员只有在定义它们的类本身被收集时才被垃圾收集;反过来,只有在收集了定义的ClassLoader后,才会发生这种情况。这在Web应用程序容器和插件体系结构中很常见。 2)是的,定义大量静态数据可能不是一个好主意。但这与其他很多事情一样:如果需要,它很好,而如果滥用它,它就不好。只是使用常识。 3)同样,定义一千个字符串数组的接口是一个坏主意,但是当然,这不是人们通常要做的。只是使用常识。通常,没有(与内存相关的)理由可以避免使用静态变量。     ,         是。没有任何GC会清除静态变量。这很重要,因为否则将无法依赖存储在静态变量中的值。像“ Singleton”这样的设计模式都依赖于静态变量。 静态变量与实例变量中存储的相同值所占用的内存一样多,因此只要确实需要存储在变量中的值就可以进行缩写,则静态变量中就没有特定的存储开销。但是在线程安全等方面,使用静态变量所带来的副作用要比内存问题更重要。 是。但是接口是用来描述功能提供者和用户之间的契约的,而不是用于存储任何数据的。     ,         不,它们与班级一起收集。 相比之下开销呢?有什么选择? 是的,但是没有人说您必须用静态成员填充它们。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。