这个问题是关于内存管理的问题。 GC中的GC。
由于java没有像C#这样的真正的静态类,所以类中的静态成员的范围如下所示:
public class Test {
public static String myVariable;
}
让我们说在另一个类Foo中设置/调用Test.myVariable。
只要Foo还活着,Test.myVariable会继续活着吗?
OR
只要应用程序域是,Test.myVariable是否会保持活动状态?
myVariable什么时候会超出范围?
答案 0 :(得分:2)
我猜你的意思是什么时候它可用于垃圾收集。当负责加载类的类加载器本身是垃圾收集的候选者时,静态成员是垃圾收集的候选者。 例如,假设类Test由类加载器对象加载,例如loader1.So当loader1符合GC条件时,类Test和它的静态变量,在这种情况下myVariable也适用于GC 查看here
答案 1 :(得分:0)
public
访问意味着它可供所有人使用。 public
和static
变量之间没有instance
的区别。
myVariable什么时候会超出范围?
不确定变量超出范围是什么意思。范围是公开的,因此它将随处可用。垃圾收集方面的JVM生存期取决于对类的引用。
答案 2 :(得分:0)
你的班级是公开的。你的静态成员是公开的。它不会超出范围。
答案 3 :(得分:0)
我理解您关注的是垃圾收集时间。在继续之前,您需要了解内存管理
请注意,只有变量及其技术值(基元或引用)存储在PermGen空间中。
如果您的静态变量是对象的引用,则对象本身存储在堆的正常部分(年轻/老一代或幸存者空间)中。这些对象(除非它们是类等内部对象)不存储在PermGen空间中。
示例:
static int i = 1; //the value 1 is stored in the permgen section
static Object o = new SomeObject(); //the reference(pointer/memory address) is stored in the permgen section, the object itself is not.