java有内联函数麽?
如果funcA(),反复调用funcB(),那么栈内存中分配给funcB()的是只分配一次,还是调用一次,分配一次?
如果funcA(),反复调用funcB(),那么栈内存中分配给funcB()的是只分配一次,还是调用一次,分配一次?
解决方案 »
- 创建窗口的例子这句话是什么意思?
- SAX解析XML时,如何终止当前characters运行?
- 知识点询问~~~理论
- 如何设置java类文件编译后放到web-inf/classes目录下
- 关于评定等级的问题||另外还有就是如何把一个JTable里面的东西导出到一个文本文档里面?
- 怎样可以让JAVA作成的界面 在不同系统之间兼容啊?
- 紧急求助---java本地化问题
- 在Tree上面右击菜单时出现 鼠标没在节点上点,但节点仍然选中了??代码
- java初学者的疑惑
- 各位大虾:这个applet程序为什么运行时不能初始化???
- 当web 应用程序启动时,会会进行初始化,如何在初始化失败后,将整个应用程序挂起,不继续执行,但应保留程序的控制台?
- 一个调用 setBackground()的疑惑
如果funcA() 反复调用funcB() 那麽堆内存是 只有一个funcB()在堆内存的实现,还是有多个不同地址的堆内存的实现?
如果方法比较长,一般都不会内联,那样空间消耗太大了吧
一个进程只有一个栈空间。栈空间存放的是返址、传入参数以及函数内的局部变量。
函数A反复调用函数B,是一个入栈、出栈的重复过程。不会消耗完栈空间的。最容易耗尽栈空间的,是递归调用。
-----------------------------------------
我的BLOG:http://blog.csdn.net/beepbug/
有内联,但不必由你操心的,JAVA虚拟机能够智能的判断你的方法是否需要内联。在问一哈,大家都从C,C++转过了来的??
JAVA里面还谈什么函数?
关于堆栈的分配,与C,C++是一样的,首先操作系统(虚拟机)会为你的程序开辟一块内存,然后把它分为四块:代码区,全局区,堆区,栈区。代码区存放的是你的字节码,全局区放的是你的全局变量,JAVA中不推荐全局变量(public int i;),堆区是动态内存,供程序使用,栈区提供压栈操作。也就是说,你的函数是被生成了字节码放在了代码区。
而这段代码区内,如果你的方法B被虚拟机自动的生成字节码放在了你的方法A的字节码的内部,就叫内联了。
如果它们的字节码还是分开的。则不能同时进栈。这时,你调用一次方法B,则它就要进栈一次,降低了程序的性能。
在C++里面是否内联由你自己决定,但JAVA虚拟机能够自动判断你的程序是否需要内联。是不是很NB啊,呵呵。举个例子,假如方法B中有很多循环嵌套语句,系统会认为这些语句给程序的正确执行带来干扰,将不会把它设置为内联,如果这个方法关系简单,则会自动设置为内联。还有什么不清楚的吗?
——--------------------------------------
在C++里面是否内联由你自己决定,但JAVA虚拟机能够自动判断你的程序是否需要内联。是不是很NB啊,呵呵。
----------------------------------------------------
在C++里面,如果你自己手动的将函数设置为内联 inline int B(),
如果函数B中的语句太复杂,编译器也会忽略你的设置,将它置为外联!!说错了,不好意思。
连发三贴,够积极了吧,赏点分,先接下了!!呵呵