1、class 没有 load 进 JVM 前,所有的 fields ,methods 均不在内存中
2、class 被 load 进 JVM 后
a. 对于方法
不论是 static 或 非 static 的,都一样的,总是跟 class 本身在一起的(即存放在内存中),永远不会被回收,除非 JVM 退出。他们的区别是,静态的方法不需要实例即可使用,而非静态的方法需要实例调用。
那么,除了安全的考虑外,以于使用者来说,调用 static 方法更方便,但并不会对内存造成额外的开销。
b. 对于属性
静态属性是跟 class 相关的,所以总是当 class 被 load 进 JVM 时即存在于内存中,并不会被垃圾回收(所以,相比于实例属性,对于内存来说是有多余的开销的)。
静态属性被回收的唯一情况是类本身被回收,这种情况的发生只有当某个应用单独使用了一种复杂的类装载器的时候才可能出现。
实例属性是跟实例相关的,故只有类实例化后,才会放入内存,当实例被回收后,实例属性自然也不存在了。