A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题,在内存图中,是否所有的方法都会进入栈内存,包括局部方法、成员方法、构造方法。

因为在看毕老师的视频中,局部方法、成员方法、构造方法调用时都会画进栈内存,而今天看刘老师的视频,却说成员方法在方法区,而方法区内成员方法的地址值是存放在堆内存的,并没有提到成员方法会进栈的情况。所以就产生了这个疑问。。。求解

3 个回复

倒序浏览
java一共有五个区:堆区,方法区,栈区,本地方法栈,程序计数器。
不管你怎么看的视频,这个是不会改变的。不过我印象中 毕老师讲的在方法区。

方法区:是存放虚拟机加载类的相关信息,如类、静态变量和常量;

堆:     所有数组和对象的实例分配都在Java堆上分配内存(比如new的对象);

栈区:在栈帧中包括局部变量表、操作数栈、指向当前方法所属的类的运行时常量池(运行时常量池的概念在方法区部分会谈到)的引用、方法返回地址和一些额外的附加信息。【按毕老师的解释来吧,就是存放局部变量】

本地方发栈:Java栈的作用和原理非常相似。区别只不过是Java栈是为执行Java方法服务的,而本地方法栈则是为执行本地方法(Native Method)服务的。在JVM规范中,并没有对本地方发展的具体实现方法以及数据结构作强制规定,虚拟机可以自由实现它。在HotSopt虚拟机中直接就把本地方法栈和Java栈合二为一。

程序计数器:用来指示执行哪条指令的(我就这么记的)【什么pu寄存器之类的,java应该不是指的那个,而是java自己的程序计数器。原理都是执行哪条语句】

希望能帮到你。深夜码字,把我给打精神了……本来困的睁不开眼了。
回复 使用道具 举报
方法都是存在方法区的吧,不然怎么叫方法区。。。还存放着类,静态变量,常量等。类一被加载就是存到方法区的。

栈内存本身是不存储方法的,只是你调用的时候才入栈,调用完就出栈。
这就是为什么递归函数会把栈区撑爆的原因,一直调用的话栈内存就存放着很多方法和变量。

你都说了吧:毕老师把方法画进栈内存,这就是入栈,不代表方法存放在栈内存中。毕老师说的没错。
                     刘老师说的也没错,成员方法就是存放在方法区。堆内存中的是地址

局部方法:(什么鬼。。我理解成主函数中的方法行么。如果是的话也是存储在方法区)
成员方法:方法区。
构造函数:方法区。



以上纯属本人瞎扯,求大神解答,我这样理解对不对……
回复 使用道具 举报 1 0
Nick_KJ 发表于 2015-4-9 00:50
java一共有五个区:堆区,方法区,栈区,本地方法栈,程序计数器。
不管你怎么看的视频,这个是不会改变的 ...

感觉楼主总结的好精辟。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马