java中堆与栈
java程序是运行在jvm上的(java虚拟机),jvm实现了java平台的无关性,也是java程序和操作系统之间但桥梁。堆与栈是jvm进行内存分配时所涉及的内存区域。
栈:一般存放基本数据类型的值、引用数据类型的实例(或者局部变量等)。
堆:一般存放程序动态产生的数据,比如new出的对象。注意创建的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存在各自的堆中,但他们类的方法是共享的,不需要每次创建新对象就把成员方法复制一次。
栈的读取速度很快,仅次于cpu中的寄存器,遵循先进后出原则,数据共享,节省内存,在生存期结束后会自动释放。缺点是栈在分配内存时,数据的大小和生存期是确定的,缺乏灵活性。
堆的读取速度比较慢,数据不共享,由java的垃圾回收机制来回收释放内存,但是可以动态的分配内存大小。