Posted on 2010-10-09 17:19
kangaroo 阅读(539)
评论(0) 编辑 收藏
简单的说,jvm的堆是存放对象的地方,栈存放的是基本数据类型和对象的引用。jvm栈是运行时的单位,jvm堆是存储的单位。java中每个线程都有一个栈与之对应,这个很容易理解,每一个线程都有其特殊的执行流程逻辑,因此需要一个独立的线程栈与之对应。jvm栈因为是运行时单位,所以里面存储的信息都是跟当前线程相关的东西,如局部变量、运行时状态,返回值等。而jvm堆是真正存放数据的地方,多个jvm栈可以共享堆中的数据。
jvm堆和栈分离的好处,从软件设计的角度看,栈代表处理逻辑,堆代表数据,分而治之,逻辑更加清楚。因为堆中的内容可以被共享,节省了空间。从面向对象的角度,对象的属性,即数据,被存放在堆中,而对象中的方法,则是运行逻辑,存放在栈中。
平时我们在eclipse启动程序,我们可以通过-Xms,-Xmx来设置大小,其实是在设置初始堆空间,和最大堆空间的大小。