系统方面的堆和栈
一、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操做方式相似于数据结构中的栈。
二、堆区(heap)— 是一个可动态申请的内存空间(其记录空闲内存空间的链表由操做系统维护),在java中,全部使用new xxx()构造出来的对象都在堆中存储通常由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式却是相似于链表。
堆是全局的,堆栈是每一个函数进入的时候分一小块,函数返回的时候就释放了,静态和全局变量,new获得的变量,都放在堆中,局部变量放在栈中,因此函数返回,局部变量就全没了java
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不一样,Java自动管理栈和堆,程序员不能直接地设置栈或堆。程序员
栈的优点是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是肯定的,缺少灵活性。另外,栈数据能够共享,详见第3点。
堆(能够共享)的优点是能够动态地分配内存大小,全部使用new xxx()构造出来的对象都在堆中存储,生存期也没必要事先告诉编译器,Java的垃圾收集器会自动收走这些再也不使用的数据。但缺点是,因为要在运行时动态分配内存,存取速度较慢。数据结构
如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据所有存在于堆中,Java用new()语句来显示地告诉编译器,在运行时才根据须要动态建立,所以比较灵活,但缺点是要占用更多的时间。ide