Java并发(1)- 聊聊Java内存模型 (2)

Java并发(1)- 聊聊Java内存模型

所有的原始类型(boolean,byte,short,char,int,long,float,double)局部变量都存储在线程堆栈中,不对其他线程共享。堆中则包含了Java程序中创建的对象。
举个例子:

public class MemoryModel { public int i = 0; public void methodOne() { int localVarOne = 1; SharedObject localVarTwo = SharedObject.sharedObject; Integer localVarThree = new Integer(1); } } public class SharedObject { pubic static SharedObject sharedObject = new SharedObject(); public int sharedVarOne = 1; }

代码中局部变量localVarOne存储在线程堆栈中。局部变量localVarTwo的引用存储在线程堆栈中,但对象本身存储在堆上。局部变量localVarThree同localVarTwo一样,引用存储在线程堆栈中,但对象本身存储在堆上。不同的是多线程执行methodOne方法时,localVarTwo由于是静态类型,在堆中只有一份数据,而localVarThree在堆和堆栈中都有多份数据。局部变量对象的成员变量sharedVarOne也存储在堆上,无论sharedVarOne是基本类型还是引用类型都是如此。

参考资料:
《深入理解Java内存模型》
《深入理解Java虚拟机》
《Java并发编程的艺术》

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydxwf.html