对象在堆上面,方法为什么在栈上面呢?

来源:1-5 JAVA内存模型

Alan_1224

2019-03-10

对象在堆上面,方法为什么在栈上面呢?
–JAVA内存模型4分钟左边的图

写回答

1回答

Jimin

2019-03-10

你好,你说的是这个图吧

//img.mukewang.com/szimg/5c851e5f000110dd09100738.jpg

这里不是方法在栈上,而是多个方法里的变量在线程栈上有拷贝,而这些变量都是在堆上进行内存分配的。这里有thread stack、method one、method two、local variable1 从根本上说是 在某个线程堆栈里method one方法里的一个本地变量 local variable1 ,核心点是这里的变量

这张图正常要表达的意思是:

堆中的对象可以被多线程共享。如果一个线程获得一个对象的应用,它便可访问这个对象的成员变量。如果两个线程同时调用了同一个对象的同一个方法,那么这两个线程便可同时访问这个对象的成员变量,但是对于本地变量,每个线程都会拷贝一份到自己的线程栈中。

就这张图而言,假如把那几个方法名去掉,这几张图里变量的关系其实也没法表达了

1
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程