static方法执行方式和instance方法(非static)的执行方式有什么区别,在多线程的情况下会不会有不同的表现?就是说会不会限制在static方法上执行的线程数,方法是没有同步的。

解决方案 »

  1.   

    static相对效率要高,不需要为对象分配内存,在多线程的情况表现少有不同
      

  2.   

    每个线程都去call同一内存区的指令?
    其实问题可以这样表述:实例的方法会不会占用内存空间?
      

  3.   

    应该说static快,因为不需要动态绑定
      

  4.   

    static是常驻内存的,大家都公用这个内存,直到退出去,实例类似,只是不是常驻内存,需要的时候才装入内存。static是一直在内存中,instance却不是,需要时才调入,只是保持唯一性
      

  5.   

    lye2000000_super的说法对变量是绝对正确的,我想知道的是对于方法体本身的指令会不会每个实例一段内存空间,这在JVM中有没有对应的规范还是每个JVM表现不一样,或者什么地方可以找到相应的资料,谢谢。
      

  6.   

    楼主要弄清楚两者的区别,都是使用于什么场合,这些东西在java的基本教程里应该都有的.
      

  7.   

    呵呵呵,整个对象就是一个变量啊。你所说的实例就是放在一个变量中。考虑一下,一个String对象和一个类对象有什么区别呢?
      

  8.   

    lye2000000_super,你的意思是说实例的方法(non-static)就是每个实例各自一段内存空间?好像有点浪费哈。你确认吗?
    至于String和类对象,本身没有任何实质性区别,换句话说:String的方法,比如toUpperCase,这个方法体是需要内存空间来保存指令的,这个内存空间是每个String一段还是所有的String共用一段?
      

  9.   

    static是最快的,缺点就是长期占用内存
      

  10.   

    楼上的,我突然有另一个问题,每个object都有class,第一次instance 一个object,其实在jvm中有两个object,一个是class,另一个是object本身,如果这个object长期不用,可能会被gc干掉,那么class呢,不会被干掉吗?
      

  11.   

    找到答案了,instance方法是每个instance一段内存区间。
    第二个问题,class一般是不会被卸载的,JVM优化也许会把它卸掉,sun的原话是:“class or interface may be unloaded if and only if its class loader is unreachable. Classes loaded by the bootstrap loader may not be unloaded.”