java有内联函数麽?
如果funcA(),反复调用funcB(),那么栈内存中分配给funcB()的是只分配一次,还是调用一次,分配一次?

解决方案 »

  1.   

    只有final函数才有可能被优化
      

  2.   

    我是搂主。写错了,栈内存只有funcB()的地址。真正执行的是在堆内存中。
    如果funcA() 反复调用funcB() 那麽堆内存是 只有一个funcB()在堆内存的实现,还是有多个不同地址的堆内存的实现?
      

  3.   

    final 函数运行在什么地方?栈内存?
      

  4.   

    栈内存只有funcB()的地址。真正执行的是在堆内存中。你问的是哪个函数的栈空间。
      

  5.   

    final函数有可能被优化成内联函数,这个和编译器有关
    如果方法比较长,一般都不会内联,那样空间消耗太大了吧
      

  6.   

    对你问题,看不太明白。下面胡乱回答一点,希望对你有帮助。
    一个进程只有一个栈空间。栈空间存放的是返址、传入参数以及函数内的局部变量。
    函数A反复调用函数B,是一个入栈、出栈的重复过程。不会消耗完栈空间的。最容易耗尽栈空间的,是递归调用。
    -----------------------------------------
    我的BLOG:http://blog.csdn.net/beepbug/
      

  7.   

    你如果是想问FUNCB()在堆去开几块空间的话???那只有一块!问题比较模糊!
      

  8.   

    告诉你正确的答案:
    有内联,但不必由你操心的,JAVA虚拟机能够智能的判断你的方法是否需要内联。在问一哈,大家都从C,C++转过了来的??
    JAVA里面还谈什么函数?
      

  9.   

    补充一下:
    关于堆栈的分配,与C,C++是一样的,首先操作系统(虚拟机)会为你的程序开辟一块内存,然后把它分为四块:代码区,全局区,堆区,栈区。代码区存放的是你的字节码,全局区放的是你的全局变量,JAVA中不推荐全局变量(public int i;),堆区是动态内存,供程序使用,栈区提供压栈操作。也就是说,你的函数是被生成了字节码放在了代码区。
    而这段代码区内,如果你的方法B被虚拟机自动的生成字节码放在了你的方法A的字节码的内部,就叫内联了。
    如果它们的字节码还是分开的。则不能同时进栈。这时,你调用一次方法B,则它就要进栈一次,降低了程序的性能。
    在C++里面是否内联由你自己决定,但JAVA虚拟机能够自动判断你的程序是否需要内联。是不是很NB啊,呵呵。举个例子,假如方法B中有很多循环嵌套语句,系统会认为这些语句给程序的正确执行带来干扰,将不会把它设置为内联,如果这个方法关系简单,则会自动设置为内联。还有什么不清楚的吗?
      

  10.   

    再次补充,更正上个帖子的错误::
    ——--------------------------------------
    在C++里面是否内联由你自己决定,但JAVA虚拟机能够自动判断你的程序是否需要内联。是不是很NB啊,呵呵。
    ----------------------------------------------------
    在C++里面,如果你自己手动的将函数设置为内联 inline int B(),
    如果函数B中的语句太复杂,编译器也会忽略你的设置,将它置为外联!!说错了,不好意思。
    连发三贴,够积极了吧,赏点分,先接下了!!呵呵
      

  11.   

    java里所有函数都是由系统来判断的一般默认为内联,和C++的默认外联正好相反