Heap:
1. 主要是存储新建object和variable,系统gc自动回收
2. 分为3个区:young,old, permanent. young区主要存放刚刚初始化的对象,当系统发现一定时间内都未被使用的对象,就会移动到old区.
stack:
1. 操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性
2. 存储效率比heap高,可共享存储数据。比如int a = 3, int b = 3.系统会在stack中先创建a,b两个对象引用,存放3这个数据,a,b引用同时指向3.
又比如:String x = new String("test").则于堆中创建对象,每new一次,就创建一个新的对象来存储test
String x = ”test“,在stack中创建一个x对象引用,一个test变量,x指向”test“变量。
由此可总结为在建立一个对象时从两个地方分配内存,在堆中分配的内存实际建立这个对象,而在栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
(未完)