静态方法和静态属性是否常驻内存
2012-09-25 15:27
204 查看
1、class 没有 load 进 JVM 前,所有的 fields ,methods 均不在内存中
2、class 被 load 进 JVM 后
a. 对于方法
不论是 static 或 非 static 的,都一样的,总是跟 class 本身在一起的(即存放在内存中),永远不会被回收,除非 JVM 退出。他们的区别是,静态的方法不需要实例即可使用,而非静态的方法需要实例调用。
那么,除了安全的考虑外,以于使用者来说,调用 static 方法更方便,但并不会对内存造成额外的开销。
b. 对于属性
静态属性是跟 class 相关的,所以总是当 class 被 load 进 JVM 时即存在于内存中,并不会被垃圾回收(所以,相比于实例属性,对于内存来说是有多余的开销的)。
静态属性被回收的唯一情况是类本身被回收,这种情况的发生只有当某个应用单独使用了一种复杂的类装载器的时候才可能出现。
实例属性是跟实例相关的,故只有类实例化后,才会放入内存,当实例被回收后,实例属性自然也不存在了。
2、class 被 load 进 JVM 后
a. 对于方法
不论是 static 或 非 static 的,都一样的,总是跟 class 本身在一起的(即存放在内存中),永远不会被回收,除非 JVM 退出。他们的区别是,静态的方法不需要实例即可使用,而非静态的方法需要实例调用。
那么,除了安全的考虑外,以于使用者来说,调用 static 方法更方便,但并不会对内存造成额外的开销。
b. 对于属性
静态属性是跟 class 相关的,所以总是当 class 被 load 进 JVM 时即存在于内存中,并不会被垃圾回收(所以,相比于实例属性,对于内存来说是有多余的开销的)。
静态属性被回收的唯一情况是类本身被回收,这种情况的发生只有当某个应用单独使用了一种复杂的类装载器的时候才可能出现。
实例属性是跟实例相关的,故只有类实例化后,才会放入内存,当实例被回收后,实例属性自然也不存在了。
相关文章推荐
- 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性
- Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
- 自制Java虚拟机(六)静态属性和静态方法(getstatic, putstatic, invokestatic, <clinit>)
- 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性
- Object C学习笔记10-静态方法和静态属性
- freemarker之调用JAVA静态方法和静态属性
- 转载——从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性
- 从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性
- java 内存优化整理,从JVM内存管理的角度谈JAVA类的静态方法和静态属性
- 类的静态方法(函数)中为什么不能调用非静态成员(属性)?
- Object C学习笔记10-静态方法和静态属性
- 工作总结----freemarker调用静态方法(静态属性)
- Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法 属性分为实例属性与类属性 方法分为普通方法,类方法,静态方法 一:属性: 尽量把需要用户传入的属性作为实例属性,而
- php静态属性和静态方法总结
- 类的静态方法(函数)中为什么不能调用非静态成员(属性)?
- 5.Static ,protect,属性和方法,静态方法(static)和实例方法,JAVA的静态变量、静态方法、静态类
- Spring MVC 属性文件读取注入到静态字段
- 错误 10 非静态的字段、方法或属性“Test10.Program.a”要求对象引用
- 静态代码块,静态属性,静态方法,普通代码块,普通方法,普通属性,构造方法的加载顺序及执行顺序
- 静态属性和静态方法 - C++快速入门21