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

Ami*_*pta 2 java jvm interface static-members

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

现在我的问题是;

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

Ern*_*ill 6

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

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

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