问题描述
|
根据关于静态成员的概念,当第一次对其类进行调用时,将它们创建/加载到内存中。它们在该类的所有实例中都是常见的。意味着它们不会被重新创建或重新初始化等。此外,只能通过类名称访问它们。无需仅为访问它们而为该类创建对象。
现在我的问题是;
静态成员是否曾经在
内存,直到应用程序
跑步?即使所有实例
该类的被收集
GC(垃圾收集器)。
对于一个大型项目,需要8-10个团队
在一起工作,他们不在乎
关于其他团队的编码。
他们可以创建静态成员为
根据他们的需要。如果所有成员
被缓存在内存中,不是吗
在JVM上产生开销?
默认情况下,接口的所有成员均为STATIC,并且在许多情况下都可以很好地使用接口。但是,如果我牢记上述问题,是否仍应使用接口?
解决方法
1)静态成员只有在定义它们的类本身被收集时才被垃圾收集;反过来,只有在收集了定义的ClassLoader后,才会发生这种情况。这在Web应用程序容器和插件体系结构中很常见。
2)是的,定义大量静态数据可能不是一个好主意。但这与其他很多事情一样:如果需要,它很好,而如果滥用它,它就不好。只是使用常识。
3)同样,定义一千个字符串数组的接口是一个坏主意,但是当然,这不是人们通常要做的。只是使用常识。通常,没有(与内存相关的)理由可以避免使用静态变量。
,
是。没有任何GC会清除静态变量。这很重要,因为否则将无法依赖存储在静态变量中的值。像“ Singleton”这样的设计模式都依赖于静态变量。
静态变量与实例变量中存储的相同值所占用的内存一样多,因此只要确实需要存储在变量中的值就可以进行缩写,则静态变量中就没有特定的存储开销。但是在线程安全等方面,使用静态变量所带来的副作用要比内存问题更重要。
是。但是接口是用来描述功能提供者和用户之间的契约的,而不是用于存储任何数据的。
,
不,它们与班级一起收集。
相比之下开销呢?有什么选择?
是的,但是没有人说您必须用静态成员填充它们。