需要静态变量及其在jvm上的开销
根据静态成员的概念,当第一次调用它的类时,它们被创建/加载到内存中。 它们在该类的所有实例中都很常见。 意味着它们不会被重新创建或重新初始化等。此外,它们只能通过类名访问。 不需要为该类创建对象来访问它们。
现在我的问题是;
- 在应用程序运行之前,静态成员是否一直在内存中? 即使该类的所有实例都已被GC(垃圾收集器)收集。
- 对于一个大型项目,8-10个团队正在一起工作,他们不关心其他团队的编码。 他们可以根据需要创建静态成员。 如果所有成员都缓存在内存中,它是否会在JVM上创建开销?
- 默认情况下,接口的所有成员都是STATIC,并且在许多情况下接口的使用都很好。 但如果我记住上述问题,我还应该使用接口吗?
1)静态成员只有在定义它们的类本身被收集时才被垃圾收集; 这反过来只有在收集定义的ClassLoader时才会发生。 这在Web应用程序容器和插件体系结构中很常见。
2)是的,定义大量静态数据可能是个坏主意。 但它就像很多其他的东西:如果你需要它会很好,如果你滥用它会很糟糕。 只需使用常识。
3)同样,定义一千个字符串数组的接口将是一个坏主意,但当然这通常不是人们所做的。 只需使用常识。 一般来说,没有(与内存相关)的理由来避免静态变量。
-
是。 没有GC会清理静态变量。 这很重要,否则不能依赖存储在静态变量中的值。 像“Singleton”这样的设计模式依赖于静态变量。
-
静态变量占用与实例变量中存储的相同值一样多的mem,因此只要存储在变量中的值对于abblication确实是必需的,静态变量中就没有特定的存储开销。 但是,当谈到线程安全性等时,使用静态变量所产生的副作用需要更多地考虑到内存问题。
-
是。 但是Interfaces用于描述提供者和用户之间的function合同,而不是用于存储任何数据。
-
不,他们是在课堂上收集的。
-
开销比较什么? 有什么选择?
-
是的,但是没有人说你必须用静态成员填满他们。