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

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

现在我的问题是;

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

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

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

3)同样,定义一千个字符串数组的接口将是一个坏主意,但当然这通常不是人们所做的。 只需使用常识。 一般来说,没有(与内存相关)的理由来避免静态变量。

  1. 是。 没有GC会清理静态变量。 这很重要,否则不能依赖存储在静态变量中的值。 像“Singleton”这样的设计模式依赖于静态变量。

  2. 静态变量占用与实例变量中存储的相同值一样多的mem,因此只要存储在变量中的值对于abblication确实是必需的,静态变量中就没有特定的存储开销。 但是,当谈到线程安全性等时,使用静态变量所产生的副作用需要更多地考虑到内存问题。

  3. 是。 但是Interfaces用于描述提供者和用户之间的function合同,而不是用于存储任何数据。

  1. 不,他们是在课堂上收集的。

  2. 开销比较什么? 有什么选择?

  3. 是的,但是没有人说你必须用静态成员填满他们。