在最近的项目里我负责的一个模块中,
有很多需要用到同一个算法或逻辑的地方,
所以按照习惯思路,写了一个util的类,
里面都是static的方法或者field
比如:
public static int add(int a, int b){
    ....
}虽然用的时候很舒服,
不过最近有闲功夫了,
就瞎琢磨起来。这些方法,或者说这个util类,
在什么时候会被系统回收掉呢?或者是想问这些方法或者这个util类,
会不会有和普通对象相同的“占用/消耗内存”的问题,
也就是说需不需要担心这个类在项目运行自始至终都会留在内存中,除非运行结束。
比如运行这个项目的j2ee的服务结束的时候。或者就根本不用操心这方面的事情呢?主要是我对java如何分配那些static的东西不是很清楚!
尤其是纯util类,
会不会只要虚拟机运行着,就都存在这些static的东西呢?问了一大堆,不知道说清楚没有!很久没来csdn了!顺便祝大家身体健康吧!good luck

解决方案 »

  1.   

    static的优点:节省内存(class 中static 方法 变量 在类被虚拟机加载的时候就被分配了内存,以后所有调用,就从这里调,不同虚拟机除外)。
    static的缺点:不过他们修饰的方法、变量被没被使用,只要类加载就开辟了他们自己一片小天地。
    综上所述:如果不是经常使用的方法或变量,那么就不应该用static。
      

  2.   


    也就是说只会在虚拟机结束的时候才会被释放?
    那就是比如是tomcat的话,就是tomcat停止运行的时候才会释放static的资源吗?谢谢
      

  3.   

    我上次看Java与模式里面提到,除非是整个系统都需要用到的代码,否则应该尽量避免使用static方法不过我一直不太理解,也没能真正领会期待这方面有经验的朋友来总结一下
      

  4.   

    我上次看Java与模式里面提到,除非是整个系统都需要用到的代码,否则应该尽量避免使用static方法不过我一直不太理解,也没能真正领会期待这方面有经验的朋友来总结一下
      

  5.   

    用于static的方法应该是指实际上不需要实例化的功能。
    它通常是像util那样可以供很多包使用的通用类。