首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jvm上静态变量的需求及其开销

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

Stack Overflow用户
提问于 2011-06-01 03:43:25
回答 3查看 1.5K关注 0票数 2

根据静态成员的概念,当首次调用其类时,它们将被创建/加载到内存中。它们在该类的所有实例中都很常见。意味着它们不会被重新创建或重新化等等。此外,它们只能通过类名访问。不需要为该类创建对象来访问它们。

现在我的问题是;

  1. ,在应用程序运行之前,静态成员是否一直在内存中?即使这个类的所有实例都是由GC(垃圾collector).
  2. For --一个大型项目,8-10个团队一起工作)收集的,他们也不关心其他团队的编码。他们可以根据自己的需要创建静态成员。如果所有的成员都缓存在内存中,它不会在JVM上造成开销吗?默认情况下,
  3. ,接口的所有成员都是静态的,而且在许多情况下接口的使用都很好。但是,如果我将上述问题牢记在心,是否仍应使用接口呢?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-01 03:48:56

1)只有当定义静态成员的类本身被收集时,静态成员才会被垃圾收集;这也只能在收集定义的ClassLoader时才会发生。这在web应用程序容器和插件体系结构中很常见。

2)是的,定义大量的静态数据可能是个坏主意。但是它就像很多其他的东西:如果你需要它,它是好的,如果你滥用它,它是坏的。用常识就行。

3)再一次,定义1000个String数组的接口是个坏主意,但这当然不是人们通常所做的事情。用常识就行。一般情况下,没有(与内存相关的)原因可以避免静态变量。

票数 6
EN

Stack Overflow用户

发布于 2011-06-01 03:50:21

  1. 是的。任何GC都不会清理静态变量。这一点很重要,因为否则不能依赖存储在静态变量中的值。像"Singleton“这样的设计模式依赖于静态变量。
  2. --静态变量和实例变量中存储的值一样多,因此只要变量中存储的值对于放弃是必要的,静态变量中就没有特定的存储开销。但是,在涉及线程安全等方面,使用静态变量所带来的副作用需要更多地考虑到内存问题。

  1. ,是的。但是接口是用来描述提供者和用户之间的功能契约,而不是用来存储任何数据。
票数 1
EN

Stack Overflow用户

发布于 2011-06-01 05:14:06

  1. 不,它们是用收集起来的,比较什么?什么是alternative?
    1. Yes,,但没人说你必须用静态成员来填满它们。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6196027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档