所有的原始类型(boolean,byte,short,char,int,long,float,double)局部变量都存储在线程堆栈中,不对其他线程共享。堆中则包含了Java程序中创建的对象。
举个例子:
代码中局部变量localVarOne存储在线程堆栈中。局部变量localVarTwo的引用存储在线程堆栈中,但对象本身存储在堆上。局部变量localVarThree同localVarTwo一样,引用存储在线程堆栈中,但对象本身存储在堆上。不同的是多线程执行methodOne方法时,localVarTwo由于是静态类型,在堆中只有一份数据,而localVarThree在堆和堆栈中都有多份数据。局部变量对象的成员变量sharedVarOne也存储在堆上,无论sharedVarOne是基本类型还是引用类型都是如此。
参考资料:
《深入理解Java内存模型》
《深入理解Java虚拟机》
《Java并发编程的艺术》