【发布时间】:2015-04-14 10:35:00
【问题描述】:
当一个类的静态变量不再存在时,我发现当一个类被卸载时,它们的静态变量会被重新初始化。 “卸载类”是否意味着销毁(如果我们假设这个类是一个活动)? 谢谢
【问题讨论】:
当一个类的静态变量不再存在时,我发现当一个类被卸载时,它们的静态变量会被重新初始化。 “卸载类”是否意味着销毁(如果我们假设这个类是一个活动)? 谢谢
【问题讨论】:
卸载类可能发生也可能不发生,这取决于 JVM 实现,并且不应影响类加载器可访问的任何类。来自 JLS 的引用:
当且仅当其定义的类加载器可以被垃圾收集器回收时,才能卸载一个类或接口”
您可以在 ´Java language specification #12.7 中找到可能/可能不会发生的完整描述。
【讨论】:
如果类加载器需要内存来加载新类并且没有足够的可用内存,则卸载类 id。
如果卸载的类在不同的时刻重新加载,则会重新初始化静态变量。
【讨论】:
A class or interface may be unloaded if and only if its defining class loader may be reclaimed by the garbage collector as discussed。 JLS 12.7