final关键字可以提高程序的性能吗?如果知道final的运行机制的大虾请指点指点。
如果只是说,使用了final的类不是继承的,用了final的方法是不可以重写的,用了final的属性是不可以赋值的。这种就不用说了。
只想理解final与优能的关系。

解决方案 »

  1.   

     那是不是,如果可以确定不用继承的类都使用final???
      

  2.   

    当编译器发现一个final 方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码这种正常方式而执行方法调用机制(将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈中的参数,处理返回值),并且以方法体中的实际代码的复本来替代方法调用。
    这将消除方法调用的开销。
    当然,如果一个方法很大,你的程序代码就会膨胀,
    因而可能看不到内嵌带来的任何性能的提高。
    因为,所带来的性能提高会因为花费于方法内的时间量而被缩减。
    这意味着java编译器能够观察到这些情况并明智地抉择是否对final方法执行内嵌动作。然而,最好是让编译器和JVM仅在你明确表示要阻止覆盖时,再处理效率问题,并将方法指明为final。
      

  3.   

    不是说这种情况都要用final,只有在你不想让别的类继承这个类的时候才用这种方法。
      

  4.   

    如果一个类已经明确了不继承了,是不是这种类都可以声明为final类
      

  5.   

    我觉得final和C++中的const有很大的相似性,但与其说和C++中的const有很大的相似性,倒不如说像标准C中的const,
    是一个不能改变其值的普通变量.也是有内存空间的
      

  6.   


    我通常就是这么做的, 比如一些action类, 是很难被继承的,还有servlet类等。 
      

  7.   

    哦。呵呵。我就有这种想法将action 、servlet、bean、actionForm都用final。就是怕会不会和其它 的类有什么不同,所以才问其的运行原理。
      

  8.   

    final的变量或者块,被写到内存中了
      

  9.   

    你的意思是说,如果所有的已经确定不会被继承的类如果都用final里的话,会消耗较多内存??
      

  10.   

    学习啦,接个问题,如果final过多,是不是也会产生问题啊?
      

  11.   

    final一般被我用来定义常量或者不想被继承的类
      

  12.   

    以前还不知道这些呢?这样看来final 好像有C++中的const 和inline这两个关键字的功能呢
      

  13.   

    1.5版后的final对性能优化作用不大
      

  14.   

    在1.5后的版本中,虚拟机可以探测到这些情况,
    并优化去掉这些效率反而降低的额外的内镶调用,
    因此不再需要使用final方法来进行优化了。
    只用要明确禁止覆盖是才将方法设置为final的。http://MindView.net/Books/BetterJavaLZ如果是想吧程序的效率提高的化 去了解一下整形(profiling)吧
      

  15.   


    整形(profiling)?一个什么东西 ??
      

  16.   

    final   finally  finallay  
    三个都不相同 
    1  关键字
    2  变量
    3  方法名
      

  17.   

    final定义的常量好像在构造函数中可以初始化,不知道对不对!