Java堆栈区别

栈主要是用来执行程序的,方法中定义的基本类型变量和对象的引用变量都是在栈内存中分配,方法中定义一个变量时,JVM会在栈中为这个变量分配内存空间,方法执行完成后,JVM会自动释放掉为该变量分配的栈空间。JVM为每个新创建的线程都分配一个栈空间,栈空间以帧为单位保存线程的状态,当线程激活一个Java方法,JVM就会在线程的栈空间里新压入一个帧,在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算过程的其他数据。栈内存的分配是在程序运行时进行的,但是执行一个代码块时,分配的栈空间大小是在编译时确定的。

堆内存用来存放Java对象,在堆中new出一个对象后,在栈中定义一个变量,这个变量的取值等于对象在堆内存中的首地址,用来引用对象。堆是运行时动态分配内存,对象在没有引用变量指向它的时候,才变成垃圾,但是仍然占着内存,在程序空闲的时候或者堆内存不足的时候,被垃圾回收器释放掉,由于要在运行时动态分配内存,存取速度较慢。

参考链接:

http://blog.csdn.net/chengyingzhilian/article/details/7781858

你可能感兴趣的:(Java)