黑马程序员技术交流社区
标题:
方法(函数)是否都进入栈内存
[打印本页]
作者:
qq250144825
时间:
2015-4-8 23:54
标题:
方法(函数)是否都进入栈内存
如题,在内存图中,是否所有的方法都会进入栈内存,包括局部方法、成员方法、构造方法。
因为在看毕老师的视频中,局部方法、成员方法、构造方法调用时都会画进栈内存,而今天看刘老师的视频,却说成员方法在方法区,而方法区内成员方法的地址值是存放在堆内存的,并没有提到成员方法会进栈的情况。所以就产生了这个疑问。。。求解
作者:
Nick_KJ
时间:
2015-4-9 00:50
java一共有五个区:堆区,方法区,栈区,本地方法栈,程序计数器。
不管你怎么看的视频,这个是不会改变的。不过我印象中 毕老师讲的在方法区。
方法区:是存放虚拟机加载类的相关信息,如类、静态变量和常量;
堆: 所有数组和对象的实例分配都在Java堆上分配内存(比如new的对象);
栈区:在栈帧中包括局部变量表、操作数栈、指向当前方法所属的类的运行时常量池(运行时常量池的概念在方法区部分会谈到)的引用、方法返回地址和一些额外的附加信息。【按毕老师的解释来吧,就是存放局部变量】
本地方发栈:Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。在JVM规范中,并没有对本地方发展的具体实现方法以及数据结构作强制规定,虚拟机可以自由实现它。在HotSopt虚拟机中直接就把本地方法栈和Java栈合二为一。
程序计数器:用来指示执行哪条指令的(我就这么记的)【什么pu寄存器之类的,java应该不是指的那个,而是java自己的程序计数器。原理都是执行哪条语句】
希望能帮到你。深夜码字,把我给打精神了……本来困的睁不开眼了。
作者:
君嘘
时间:
2015-4-9 03:00
方法都是存在方法区的吧,不然怎么叫方法区。。。还存放着类,静态变量,常量等。类一被加载就是存到方法区的。
栈内存本身是不存储方法的,只是你调用的时候才入栈,调用完就出栈。
这就是为什么递归函数会把栈区撑爆的原因,一直调用的话栈内存就存放着很多方法和变量。
你都说了吧:毕老师把方法画进栈内存,这就是入栈,不代表方法存放在栈内存中。毕老师说的没错。
刘老师说的也没错,成员方法就是存放在方法区。堆内存中的是地址
局部方法:(什么鬼。。我理解成主函数中的方法行么。如果是的话也是存储在方法区)
成员方法:方法区。
构造函数:方法区。
以上纯属本人瞎扯,求大神解答,我这样理解对不对……
作者:
宸宸
时间:
2015-4-9 07:26
Nick_KJ 发表于 2015-4-9 00:50
java一共有五个区:堆区,方法区,栈区,本地方法栈,程序计数器。
不管你怎么看的视频,这个是不会改变的 ...
感觉楼主总结的好精辟。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2