额。。。。。。。。。。
查了一些资料,看了大概也理解了,就是共享这块,很蛋疼。。。。
堆和栈共享的区别
1.栈:数据共享即
假设我们同时定义 int a = 3; int b = 3;编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况。
2.堆:线程共享
每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有 的线程共享
在一个java进程中可能有很多正在运行的java线程,那么在每一个java线程中都会独立开辟本地方法栈,程序计算器,和Java栈的,而方法区和堆并不是独立开辟的,他们之间是可以共享的。