把一个类写成静态的,和把一个类写成实例的然后用静态字段保持,在内存分配上有区别吗?比如说:
1 public static class Cache 2 3 { 4 //... 5 } 6 7 8 和 9 10 public class Cache 11 { 12 //... 13 } 14 15 static Cache cache=new Cache(); 16 17 18 cache变量和静态的Cache类在内存分配上有区别吗?
有区别,第一种 是Cache内的静态成员 分配在 加载堆中。
第二种, cache这个成员分配在加载堆上,然后Cache里的成员也会初始化进行分配
最大的区别在于内存。
静态方法在程序开始时生成内存,实例方法在程序运行中生成内存,
所以静态方法可以直接调用,实例方法要先成生实例,通过实例调用方法,静态速度很快,但是多了会占内存。
任何语言都是对内存和磁盘的操作,至于是否面向对象,只是软件层的问题,底层都是一样的,只是实现方法不同。
静态内存是连续的,因为是在程序开始时就生成了,而实例申请的是离散的空间,所以当然没有静态方法快,
而且静态内存是有限制的,太多了程序会启动不了。
从性能上说,静态方法效率要稍微高一些,但是它会常驻内存...
一些情况下使用静态方法是有好处的,因为对于静态方法无论你有多少个实例,
内存中要维护的一份拷贝。同时,某些方法,确实使用静态是比较恰当的..