类?static?疑惑
一个所谓无用的类判断需要同时满足3个条件:
1.该类的所有实例都已被回收,即Java堆中不存在该类的任何实例。
2.加载该ClassLoader被回收。
3.该类对应的Class对象没有在任何地方被引用,无法在任何地方反射该类的方法。
如果有一个类,包含一个静态成员变量,那么只要它被加载过一次,(事实上类在没有被销毁之前也只能加载一次)
是不是意味着这个类永远都不会被销毁,知道JVM结束?
疑问:一个类被加载后什么时候会被卸载呢?sun的原话是:"class or interface may be unloaded if and only if its class loader is unreachable. Classesloaded by the BootstrapClassLoader may not be unloaded."意思就是说类或接口可能不会被卸载除非ClassLoader是不能到达的,被BootstrapClassLoader加载的类可能不会被卸载。也就是说BootstrapClassLoader加载的部分基本不可能被卸载。
最后想说的是,如果我想在一些应用使用static做全局变量,这到底是不是安全的?会不会存在被回收的风险?大多数都是人都认为静态变量生命周期直到JVM结束。其实都是听别人说的,我想知道真实的原因,因为我对结果持怀疑态度。